Simple-MCP-Server
MCP Agent Homework
Ein TypeScript-MCP-System (Model Context Protocol), das für die Aufgabe in MCP_HOMEWORK_SKILL.md erstellt wurde: ein Agent-Host, der eine Agent-Skill (SKILL.md) lädt, sich über alle drei erforderlichen Transports mit drei MCP-Servern verbindet, deren Tools erkennt/aggregiert und Gemini das richtige Tool auf dem richtigen Server auswählen und aufrufen lässt.
Architektur
Agent Host (src/host)
skill-loader + connection-manager
+ tool-bridge + gemini-client
|
+------------------+------------------+
| | |
v v v
stdio server local HTTP server public HTTP server
(src/servers/stdio- (src/servers/http- (same http-server.ts,
server.ts) server.ts, no auth) API-key protected)
| | |
+------------------+-------------------+
|
shared tool logic (src/servers/shared/tools.ts)
3 tools (calculator, text_stats, unit_convert) + 1 resource + 1 promptsrc/servers/shared/tools.ts— die einzige Implementierung der 3 Tools, 1 Ressource und 1 Prompts, die auf jedem Server identisch registriert wird, sodass dieselbe Logik überall wiederverwendet wird (keine duplizierte Geschäftslogik).src/servers/stdio-server.ts— MCP über stdio (als Kindprozess gestartet).src/servers/http-server.ts— MCP über Streamable HTTP. Exakt dieselbe Datei bzw. derselbe Code läuft sowohl für den „lokalen“ als auch den „öffentlichen“ Server; der einzige Unterschied ist die Konfiguration (PORT,PUBLIC_MCP_API_KEY).src/host/connection-manager.ts— der MCP-Host: verbindet sich mit jedem konfigurierten Server, erkennt Tools/Ressourcen/Prompts, setzt Tool-Namen als<namespace>__<tool>in Namensräume, um Kollisionen zu vermeiden, und leitet Tool-Aufrufe an den zugehörigen Server zurück.src/host/tool-bridge.ts— konvertiert erkannte MCP-Tools in Gemini-Funktionsdeklarationen.src/host/gemini-client.ts— die Gemini-Tool-Aufruf-Schleife (Nachricht senden → Funktionsaufrufe lesen → über den Verbindungsmanager weiterleiten → Funktionsantworten zurücksenden → wiederholen, bis der endgültige Text vorliegt).src/host/skill-loader.ts— lädt SKILL.md und injiziert es als Systemanweisung des Modells, sodass die Skill die Tool-Nutzung aktiv prägt.src/host/agent-host.ts— verbindet das oben Genannte über config/servers.json.src/host/cli.ts— CLI-Einstiegspunkt (interaktiv oder--demo).
Related MCP server: mcp-tools-server
Einrichtung
npm installGeheimnisse liegen in api.env (bereits gitignored):
API_KEY=your-gemini-api-key
# Optional, only needed once you deploy the public server:
# PUBLIC_MCP_URL=https://your-app.onrender.com/mcp
# PUBLIC_MCP_API_KEY=some-strong-random-keyAusführen der einzelnen Komponenten
stdio-Server (20 Punkte)
npm run server:stdio # run directly
npm run inspector:stdio # open MCP Inspector against itInspector erkennt 3 Tools (calculator, text_stats,
unit_convert), 1 Ressource (docs://unit-conversions) und 1 Prompt
(explain-tool-result) und kann alle ausführen/lesen.
Lokaler HTTP-Server
npm run server:http # listens on http://127.0.0.1:8787/mcp, no auth
npm run inspector:http # then connect Inspector to that URLÖffentlicher HTTP-Server (15 Punkte)
Dieselbe http-server.ts wird zum „öffentlichen“ Server, sobald
PUBLIC_MCP_API_KEY gesetzt ist — jede Anfrage erfordert dann einen passenden
x-api-key-Header; fehlende/ungültige Schlüssel erhalten 401 Unauthorized.
$env:PORT=8788; $env:PUBLIC_MCP_API_KEY="a-strong-secret"; npm run server:httpÖffentliches Bereitstellen (Render.com, mit der enthaltenen render.yaml):
git init && git add -A && git commit -m "MCP homework"und dann in ein GitHub-Repository pushen, das dir gehört.In Render: New + → Blueprint → Repository auswählen (es liest
render.yamlautomatisch) oder manuell einen Web Service erstellen mit:Build-Befehl:
npm install && npm run buildStart-Befehl:
npm run start:httpHealth-Check-Pfad:
/health
Setze im Render-Dashboard die Umgebungsvariable
PUBLIC_MCP_API_KEYauf ein starkes Geheimnis (niemals committen).Nach der Bereitstellung die resultierende URL + Schlüssel in
api.enveintragen:PUBLIC_MCP_URL=https://<your-service>.onrender.com/mcpundPUBLIC_MCP_API_KEY=<gleiches Geheimnis>.Mit Inspector validieren:
Ohne Schlüssel → abgelehnt:
curl -X POST https://<url>/mcp -H "Content-Type: application/json" -d "{...}"gibt401zurück.Mit Schlüssel → funktioniert:
--header "x-api-key: <secret>"annpx @modelcontextprotocol/inspector --cli <url> --method tools/listübergeben.
Agent-Host
npm run agent # interactive CLI
npm run agent:demo # runs a scripted set of demo queriesBeim Start führt der Host Folgendes aus:
Lädt
SKILL.mdals Systemanweisung.Liest config/servers.json und verbindet sich mit dem stdio-Server (automatisch gestartet), dem lokalen HTTP-Server (muss bereits laufen) und dem öffentlichen HTTP-Server (wird automatisch übersprungen, wenn
PUBLIC_MCP_URL/PUBLIC_MCP_API_KEYnicht gesetzt sind — er ist optional, damit die Demo auch ohne Live-Bereitstellung funktioniert).Erkennt und setzt jedes Tool in einen Namensraum, übergibt sie an Gemini und leitet jeden Tool-Aufruf, den Gemini tätigt, an den richtigen MCP-Server weiter.
Konfiguration
Die Serverregistrierung ist datengesteuert über config/servers.json
— Server dort hinzufügen/entfernen, statt Host-Code zu bearbeiten. ${VAR} in einer
url wird beim Verbinden aus process.env aufgelöst; apiKeyEnv benennt die
Umgebungsvariable, deren Wert als x-api-key gesendet wird.
Agent-Skill
SKILL.md weist den Agenten an, Tools aufzurufen, statt bei
Arithmetik/Konvertierungen/Textstatistiken zu raten, pro logischer Anfrage ein Tool im
Namensraum auszuwählen, bei Unsicherheit über unterstützte Konvertierungen die Ressource
docs://unit-conversions zu konsultieren und Ergebnisse in einfacher Sprache zu erklären.
Es wird bei jedem Lauf wörtlich in die Gemini-Systemanweisung geladen (siehe
src/host/skill-loader.ts), sodass seine Regeln die Tool-Auswahl und den Antwortstil
direkt beeinflussen — sichtbar in der Demo-Ausgabe (z. B. ruft der Agent für Arithmetik
immer ein Tool auf, statt selbst zu rechnen).
Sicherheitshinweise
Es werden keine Geheimnisse committet;
api.envist gitignored und der öffentliche Server liestPUBLIC_MCP_API_KEYnur aus der Umgebung.Der öffentliche HTTP-Server lehnt jede Anfrage ohne passenden
x-api-key-Header ab (401) und akzeptiert Anfragen, sobald ein gültiger Schlüssel angegeben wird.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityDmaintenanceA lightweight MCP server providing utility tools for math, text processing, data conversion, and URL fetching. It supports both STDIO and SSE communication modes for seamless integration with Claude Desktop and remote AI agents.51
- AlicenseNot gradedqualityBmaintenanceA general-purpose MCP server with utility tools including datetime information, safe math calculations, text statistics, JSON extraction, knowledge base search, and HTTP GET requests. It demonstrates server-side MCP implementation and can be connected to Claude Desktop or LangGraph agents.MIT
- FlicenseNot gradedqualityDmaintenanceProvides math and weather tools accessible via LangGraph agent using MCP protocol with stdio and streamable HTTP transports.1
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that exposes fixed tools for GPT, Claude, and Gemini while routing to any OpenAI-compatible chat completions backend with independent configuration per target.1
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kindinh903/Simple-MCP-Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server