This page describes intended behaviour or structure. No implementation is claimed unless a section is explicitly marked Current implementation or Evidence.
ADR-0022 makes MCP the protocol for every tool, resource and prompt the Factory consumes or exposes. McpServerRegistryService is where servers are registered with their direction (consumed or exposed), transport (streamable HTTP or sandboxed stdio), endpoint or connection, authentication (OAuth 2.1 protected resource or workload identity; "none" only as a recorded, expiring exception), governance policy bundle and protocol version. After a handshake it discovers tools, resources and prompts and keeps their bindings: tools bind to Published tool descriptors with a declared side-effect class, resources map to knowledge sources with classification, prompts map to skills or workflow steps and never to policy. An unbound tool is listed but not callable.
flowchart LR
S["McpServerRegistryService"]
ToolAdapterService["ToolAdapterService"] -->|grpc| S
StudioBff["StudioBff"] -->|sync-http| S
S -->|grpc| IntegrationService["IntegrationService"]
S -->|grpc| SecretBrokerService["SecretBrokerService"]
S -->|grpc| PolicyEngineService["PolicyEngineService"]
S -->|event| AgentRegistryService["AgentRegistryService"]
S -. "McpServerRegistered" .-> E_McpServerRegistered(("event"))
S -. "McpServerStateChanged" .-> E_McpServerStateChanged(("event"))
S -. "McpCapabilitiesDiscovered" .-> E_McpCapabilitiesDiscovered(("event"))
McpServer — One registered MCP server with its direction, transport, endpoint or connection, authentication, governance policy, discovered capabilities and health. (catalog entry)
Field
Type
Required
Description
serverId
string
yes
tenantId
string
yes
name
string
yes
direction
enum:McpDirection
yes
transport
enum:McpTransport
yes
endpointRef
string
no
For consumed HTTP servers a connection reference (BC-16); credentials brokered.
commandRef
string
no
For stdio servers the sandboxed command and image.
authentication
enum:McpAuthentication
yes
governancePolicyRef
string
yes
Policy bundle applied to every call through this server (Microsoft Agent Governance Toolkit integration).
protocolVersion
string
yes
state
enum:McpServerState
yes
releaseId
string
no
Published asset release when the server is a Factory asset.
lastHandshakeAt
datetime
no
version
long
yes
Invariants:
A server reachable beyond the local process is Active only with authentication OAuth2ProtectedResource or WorkloadIdentity; NoneException requires a recorded Platform-admin approval and an expiry.
Discovered tools become callable only when bound to a tool descriptor with a declared side-effect class; an unbound tool is listed but not invocable.
Resources map to knowledge sources with scope and classification; prompts map to skills or workflow steps, never to policy (ADR-0022 §5).
A consumed server's credentials come from a connection and the Secret Broker; the registry never stores a secret.
stateDiagram-v2
Registered --> Verified : HandshakeAndDiscoverySucceeded
Verified --> Active : BindingsApproved
Active --> Degraded : HandshakeFailed
Degraded --> Active : HandshakeRecovered
Active --> Retired : Retire
Degraded --> Retired : Retire
A changed tool schema on a consumed server unbinds the tool until an Asset maintainer re-approves it, so a server cannot silently widen what an agent may do. Consumed servers' credentials are connection references brokered per handshake; the registry stores no secret.
ConnectSoft.Extensions.ModelContextProtocol hosts MCP servers and integrates the governance toolkit; no registry, discovery, binding or handshake health exists; the AgentKit .ai registry of earlier experiments is reference input only (D19). See MCP.