Product & API TerminologyΒΆ
The React admin UI uses product-facing terms: MCP server, virtual server, and A2A agent. The API predates those terms and still uses its original vocabulary β gateway and server β in routes, models, permission strings, and audit records.
#6544 tracks renaming the API to match. Until that lands, the two vocabularies coexist. This page is the map between them so you don't have to guess whether a mismatch is a documentation gap or a bug.
The mappingΒΆ
| Product term | Where it lives in the API | Notes |
|---|---|---|
| MCP server | /v1/mcp-servers routes (/gateways deprecated), the Gateway model and gateways table, RBAC permissions gateways.*, audit rows with resource_type="gateway" | |
| Virtual server | /v1/virtual-servers routes (/servers deprecated), the Server model and servers table, RBAC permissions servers.*, audit rows with resource_type="server" | The model's own docstring calls it "ORM model for MCP Servers Catalog" β the same confusion exists inside the backend, not just at the API surface. |
| A2A agent | /a2a routes | The A2A service logs through the structured logger (StructuredLogEntry table), not AuditTrail, so A2A actions do not reach the activity/audit feed the way MCP server and virtual server actions do. |
"Server" is ambiguous β always qualify itΒΆ
Don't use the bare word "server" in docs or UI copy. It means different things depending on which side you're standing on:
- In the API,
/servers(and/v1/virtual-servers) refers to virtual servers. - In the React UI,
src/api/servers.tswraps the/v1/mcp-serversendpoint (migrated in contextforge-web-ui#98) β so "server" there means an MCP server.
Always write "virtual server" or "MCP server," never just "server."
Prefer the /v1 pathsΒΆ
The /v1/mcp-servers and /v1/virtual-servers paths are canonical (#4956, shipped in #6257) and are what build_v1_router mounts in mcpgateway/api/v1/__init__.py. Lead with them.
build_v1_router also mounts /v1/gateways and /v1/servers (lines 87, 89 of mcpgateway/api/v1/__init__.py) alongside the product-language aliases. These paths are in-schema and not deprecated, but they use the original API vocabulary β prefer the /v1/mcp-servers and /v1/virtual-servers aliases in new documentation and client code.
The unversioned /gateways and /servers paths are a deprecated compatibility shim (build_legacy_router):
- Gated on
legacy_api_enabled(defaulttrue). - Excluded from the OpenAPI schema β the
/v1routes are the documented source of truth. - Carry RFC 8594
Sunsetheaders, defaulting toSat, 26 Sep 2026.
contextforge-web-ui#85 tracked moving the React UI itself onto the /v1 paths for MCP servers and virtual servers β that migration was completed by contextforge-web-ui#98 (merged 2026-09-14). Tools, resources, prompts, teams, and tokens still call the legacy paths directly, so the sunset date remains relevant for those endpoints.
What already gets this rightΒΆ
The activity feed renders product terms correctly today. _RESOURCE_LABELS in mcpgateway/routers/log_search.py translates wire-format resource_type values into product language server-side, so a gateway audit row reaches the UI as "MCP server" and a server row as "virtual server." Treat this as the model for how the two vocabularies should reconcile elsewhere.
The remaining exposure of raw API terms is in request/response schemas, RBAC permission strings, and raw audit/log fields β none of which are translated before they reach a client.
StatusΒΆ
The API vocabulary itself is unchanged for now. The full rename β schemas, permission strings, audit resource_type values, config names like GATEWAY_TEST_ALLOWED_HOSTS, and the underlying models/tables β is tracked separately in #6544.