MCP Servers Overview
Architecture and design of the Federal Frontier Platform’s MCP server fleet — 12 servers, 150+ tools, all discoverable by Compass.
What Is MCP?
The Model Context Protocol (MCP) is a lightweight JSON-RPC 2.0 interface that lets an LLM-powered application discover and invoke tools exposed by backend services. Each MCP server publishes a manifest of tools (name, description, input schema) and handles execution requests. The protocol defines two core methods:
| Method | Purpose |
|---|---|
tools/list |
Returns the server’s tool manifest — name, description, and JSON Schema for each tool’s parameters. |
tools/call |
Executes a named tool with the provided arguments and returns the result. |
MCP is transport-agnostic. The Federal Frontier Platform uses HTTP POST to /jsonrpc (JSON-RPC 2.0) as the primary transport for server-to-server communication. Some servers also support SSE (Server-Sent Events) for streaming use cases.
Platform Architecture
The platform operates 12 MCP servers exposing over 150 tools across infrastructure, identity, observability, compliance, and ontology domains. Every server runs as a standalone pod in the f3iai Kubernetes namespace.
User types a question in chat] -->|HTTP| API API[Compass API — FastAPI
1. Discover tools from MCP servers
2. Send query + manifests to LLM
3. LLM selects tools and builds args
4. Call MCP server via JSON-RPC
5. Return result to LLM for final answer] API --> FFO[FFO
50060] API --> Kolla[Kolla
50061] API --> OS[OpenStack
8080] API --> Graf[Grafana
50056] API --> KC[Keycloak
50057] API --> More[+ 7 more] style UI fill:#2d3748,stroke:#4299e1,color:#e2e8f0 style API fill:#2d3748,stroke:#4299e1,color:#e2e8f0 style FFO fill:#2c7a7b,stroke:#38b2ac,color:#e2e8f0 style Kolla fill:#1a365d,stroke:#4299e1,color:#e2e8f0 style OS fill:#1a365d,stroke:#4299e1,color:#e2e8f0 style Graf fill:#1a365d,stroke:#4299e1,color:#e2e8f0 style KC fill:#1a365d,stroke:#4299e1,color:#e2e8f0 style More fill:#1a365d,stroke:#718096,color:#a0aec0
Request Flow
- Discovery — At startup, Compass API iterates the
MCP_SERVERSregistry and callstools/liston each server. Tool manifests are cached in memory. - Selection — When a user sends a chat message, Compass passes the message plus all tool manifests to the LLM. The LLM decides which tool (if any) to call and constructs the arguments.
- Execution — Compass API sends a
tools/callJSON-RPC POST to the appropriate MCP server’s/jsonrpcendpoint. - Response — The MCP server executes the tool (querying TypeDB, SSH-ing to a hypervisor, calling a REST API, etc.) and returns the result as a JSON-RPC response.
- Synthesis — The LLM receives the tool result and generates a natural-language answer for the user.
Example JSON-RPC Exchange
Request (tools/call):
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ffo.entity.get",
"arguments": {
"entity_type": "cluster",
"entity_name": "fmc"
}
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"type\": \"cluster\", \"name\": \"fmc\", \"attributes\": {\"environment\": \"production\", ...}}"
}
]
}
}
Server Registry
MCP servers are registered in two places:
- PostgreSQL
mcp_serverstable — Stores the server name, base URL, port, and description. Used by Compass API at startup to know which servers to discover. MCP_SERVERSdict inmcp_tools.py— A Python dictionary in the Compass API codebase that maps server keys to their connection details. This is the runtime source of truth for tool routing.
To add a new server, you must update both locations. See Building a New MCP Server for the full procedure.
Server Inventory
| Server | Port | Tools | Domain |
|---|---|---|---|
| FFO | 50060 | 10 | Ontology (TypeDB) — entities, relationships, inference |
| Kolla OpenStack | 50061 | 10 | Kolla container management on hypervisors |
| OpenStack | 8080 | 23 | VM lifecycle, networking, images, flavors |
| Grafana | 50056 | 28 | Dashboards, alerts, data sources, annotations |
| Keycloak | 50057 | 12 | Users, roles, realms, clients, groups |
| Ceph | 50054 | 12 | Storage cluster health, pools, OSDs, monitors |
| ArgoCD | 50051 | 11 | GitOps applications, sync, rollback |
| Gitea | 50055 | 22 | Repositories, branches, pull requests, issues |
| Atlassian | 50052 | 20 | Jira issues, Confluence pages, search |
| Trailboss | 50059 | 1 | Cluster provisioning |
| Federal Compliance | 50053 | 3 | NIST controls |
| Tool Hub | 50058 | 1 | Aggregated tool discovery |
Health and Readiness
Every MCP server exposes standard Kubernetes probe endpoints:
/health— Liveness probe. Returns 200 if the process is running./ready— Readiness probe. Returns 200 only if the server can reach its backing service (TypeDB, SSH target, REST API, etc.).
These endpoints are wired into the Kubernetes deployment manifests as livenessProbe and readinessProbe respectively.
Observability
MCP servers expose Prometheus metrics at /metrics. Common metrics include:
mcp_requests_total— Counter of tool invocations, labeled by tool name and status.mcp_request_duration_seconds— Histogram of tool execution time.- Backend-specific counters (e.g.,
ffo_mcp_typedb_queries_totalfor FFO).
Grafana dashboards in the platform consume these metrics for alerting and capacity planning.