Files
obsidian-sympozium/06-Komunikacja/MCP Servers - Model Context Protocol.md
2026-03-25 00:05:57 +01:00

2.5 KiB

MCP Servers - Model Context Protocol

#sympozium #komunikacja #mcp

Koncepcja

MCP (Model Context Protocol) to protokół umożliwiający rozszerzanie możliwości agentów o zewnętrzne narzędzia. Sympozium integruje MCP jako first-class citizen z pełnym lifecycle management.

Architektura

MCPServer CRD → Controller
    ├── Managed: Deploy + Service + probe tools
    └── External: Just probe tools

SympoziumInstance.mcpServers[] → reference MCPServer
    ↓
AgentRun → Reconciler:
  1. Resolve MCPServer URLs (status.url)
  2. Create MCP ConfigMap (server configs)
  3. Add mcp-bridge sidecar to pod
    ↓
Agent Pod:
  ┌──────────┐  ┌──────────────┐  ┌──────────────┐
  │  Agent   │──│  MCP Bridge  │──│  MCP Server  │
  │          │  │  Sidecar     │  │  (remote)    │
  │ gh_*     │  │  Translates: │  │              │
  │ tools    │  │  tool call → │  │  GitHub API  │
  │          │  │  MCP protocol│  │              │
  └──────────┘  └──────────────┘  └──────────────┘

Tool namespacing

Problem: wiele MCP serwerów może mieć tool o tej samej nazwie.

Rozwiązanie: toolsPrefix - każde narzędzie z danego serwera dostaje prefix:

GitHub MCP (prefix: gh) → gh_create_issue, gh_list_repos
Jira MCP (prefix: jira) → jira_create_ticket, jira_search
Slack MCP (prefix: sl)  → sl_send_message, sl_list_channels

Tool filtering

toolsAllow: [create_issue]     # TYLKO te narzędzia (whitelist)
toolsDeny: [delete_repo]       # BLOKUJ te narzędzia (blacklist)

toolsDeny applied after toolsAllow - można pozwolić na all except specific.

Auto-discovery

Controller probeuje MCP server po deploy:

  1. Wysyła MCP tools/list request
  2. Odkrywa dostępne narzędzia
  3. Aplikuje allow/deny filtry
  4. Zapisuje w status.tools[]
  5. Aktualizuje status.toolCount

Transport modes

stdio → HTTP adapter

Serwer MCP używa stdio (stdin/stdout). Controller automatycznie dodaje HTTP adapter:

Container: my-mcp-server --stdio
    ↓
HTTP adapter: wraps stdio → HTTP endpoint
    ↓
mcp-bridge sidecar connects via HTTP

HTTP (native)

Serwer MCP natywnie serwuje HTTP:

Container: my-mcp-server --port 8080
    ↓
mcp-bridge sidecar connects directly

Powiązane: MCPServer | SympoziumInstance | Przepływ danych i IPC