Zum Inhalt springen

MCP Agent Server

Der MCP Agent Server ist ein MCP-Server, bei dem jedes Tool durch eine AI-Agent-Schleife unterstuetzt wird. Wenn ein AI-Client ein Tool aufruft, startet der Server einen LLM-Agenten, der iterativ FlowMCP-Schema-Tools aufruft, um das Problem zu loesen und eine strukturierte Antwort zurueckgibt.

AI Client --> MCP Protocol --> AgentToolsServer
|
ToolRegistry
|
AgentLoop
/ \
LLM (OpenRouter) ToolClient
|
FlowMCP Schemas
|
External APIs

Der AI-Client sendet eine Anfrage an den MCP-Server. Der Server startet eine Agent-Schleife, die ein LLM nutzt, um zu entscheiden welche FlowMCP-Tools aufgerufen werden, fuehrt diese aus und iteriert bis das Problem geloest ist. Die finale Antwort wird an den AI-Client zurueckgegeben.

Terminal-Fenster
npm install mcp-agent-server

Oder lokal klonen und ausfuehren:

Terminal-Fenster
git clone https://github.com/FlowMCP/mcp-agent-server.git
cd mcp-agent-server
npm install

Der Server wird als Express-Middleware eingebunden:

import express from 'express'
import { AgentToolsServer } from 'mcp-agent-server'
const app = express()
app.use( express.json() )
const { mcp } = await AgentToolsServer.create( {
name: 'My Agent Server',
version: '1.0.0',
routePath: '/mcp',
llm: {
baseURL: 'https://openrouter.ai/api',
apiKey: process.env.OPENROUTER_API_KEY
},
tools: [
{
name: 'defi-research',
description: 'Research DeFi protocols and TVL data',
inputSchema: {
type: 'object',
properties: {
query: { type: 'string', description: 'Research query' }
},
required: [ 'query' ]
},
agent: {
systemPrompt: 'You are a DeFi research agent. Use the available tools to answer questions about DeFi protocols, TVL, and market data.',
model: 'anthropic/claude-sonnet-4-5-20250929',
maxRounds: 10,
maxTokens: 4096
},
toolSources: [
{
type: 'flowmcp',
schemas: [ defilamaSchema, coingeckoSchema ],
serverParams: { DEFILAMA_KEY: process.env.DEFILAMA_KEY }
}
]
}
]
} )
app.use( mcp.middleware() )
app.listen( 4100 )

Erstellt eine neue MCP-Server-Instanz aus der Konfiguration.

const { mcp } = await AgentToolsServer.create( {
name: 'My Server',
version: '1.0.0',
routePath: '/mcp',
llm: { baseURL, apiKey },
tools: [ /* tool configs */ ],
tasks: { store: customTaskStore } // optional
} )
KeyTypBeschreibungPflicht
namestringServername fuer MCP-HandshakeJa
versionstringServer-VersionJa
routePathstringExpress-Routenpfad (Standard '/mcp')Nein
llmobjectLLM-Konfiguration { baseURL, apiKey }Ja
toolsarrayArray von Tool-KonfigurationenJa
tasksobjectTask-Store-Konfiguration (Standard InMemoryTaskStore)Nein

Gibt eine Express-Middleware zurueck, die MCP-Protokoll-Anfragen (POST/GET/DELETE) auf dem konfigurierten Routenpfad verarbeitet.

app.use( mcp.middleware() )

Gibt alle registrierten Tools im MCP-ListTools-Format zurueck.

const { tools } = mcp.listToolDefinitions()
// tools: [ { name, description, inputSchema, execution? } ]

Jedes Tool im tools-Array definiert ein Agent-gestuetztes MCP-Tool:

KeyTypBeschreibungPflicht
namestringTool-Name im MCP-ProtokollJa
descriptionstringWas dieses Tool machtJa
inputSchemaobjectJSON Schema fuer Tool-EingabeJa
agentobjectAgent-KonfigurationJa
toolSourcesarrayWoher der Agent seine Tools beziehtJa
executionobject{ taskSupport: 'optional' | 'required' }Nein
KeyTypBeschreibungPflicht
systemPromptstringSystem-Prompt fuer das LLMJa
modelstringLLM-Modell-ID (z.B. 'anthropic/claude-sonnet-4-5-20250929')Ja
maxRoundsnumberMaximale Agent-Iterationen (Standard 10)Nein
maxTokensnumberMaximale Completion-Tokens (Standard 4096)Nein
answerSchemaobjectBenutzerdefiniertes JSON Schema fuer das submit_answer-ToolNein

Jeder Eintrag in toolSources definiert, woher der Agent seine Tools bezieht:

KeyTypBeschreibungPflicht
typestringSource-Typ (aktuell 'flowmcp')Ja
schemasarrayFlowMCP-Schema-ObjekteJa
serverParamsobjectAPI Keys und UmgebungsvariablenNein

Importiere FlowMCP-Schemas und uebergib sie als Tool Sources:

import { main as defilamaMain } from './schemas/defillama.mjs'
import { main as coingeckoMain } from './schemas/coingecko.mjs'
const tools = [
{
name: 'defi-analyst',
description: 'Analyze DeFi protocols',
inputSchema: { /* ... */ },
agent: {
systemPrompt: 'You are a DeFi analyst.',
model: 'anthropic/claude-sonnet-4-5-20250929',
maxRounds: 10,
maxTokens: 4096
},
toolSources: [
{
type: 'flowmcp',
schemas: [ defilamaMain, coingeckoMain ],
serverParams: {
COINGECKO_API_KEY: process.env.COINGECKO_API_KEY
}
}
]
}
]

Zahlungsgating ohne Code-Kopplung hinzufuegen — reine Express-Middleware-Reihenfolge:

import express from 'express'
import { X402Middleware } from 'x402-mcp-middleware/v2'
import { AgentToolsServer } from 'mcp-agent-server'
const app = express()
app.use( express.json() )
// 1. Payment Gate (optional)
const x402 = await X402Middleware.create( { /* config */ } )
app.use( x402.mcp() )
// 2. Agent MCP Server
const { mcp } = await AgentToolsServer.create( { /* config */ } )
app.use( mcp.middleware() )
app.listen( 4100 )
  • StreamableHTTP-Transport mit sitzungsbasierten Verbindungen
  • LLM-Agent-Schleife mit iterativem Tool-Calling via Anthropic SDK
  • FlowMCP-Schemas als In-Process-Tool-Sources (kein externer Server)
  • Konfigurierbares Answer-Schema pro Tool fuer strukturierte Ausgaben
  • MCP Tasks API fuer asynchrone Tool-Ausfuehrung
  • x402-Komposition fuer Zahlungsgating via Middleware-Reihenfolge
  • Mehrere Tool Sources pro Tool via CompositeToolClient