MCP Minimal Agent Demo Server
MCP Agent Harness デモ
Model Context Protocol (MCP) を使用した LLM エージェントハーネス の最小限のデモンストレーションです。
このリポジトリには、Node.js/TypeScript と Python の小さな例が含まれており、エージェントが以下のことを行う方法を示しています:
MCP サーバーからツールを発見する;
それらのツールを LLM に公開する;
モデルにツール呼び出しを要求させる;
MCP を通じてそれらの呼び出しを実行する;
ツールの結果をモデルに返す;
モデルが最終的な応答を生成するまでループを続ける。
重要: これはデモンストレーションコードです。本番コードではありません。安全で堅牢な、あるいは完全なエージェントフレームワークとして扱わないでください。
このリポジトリの目的は、MCP ベースのエージェントハーネスの仕組みを簡単に検査できるようにすることです。
アーキテクチャ
大まかな流れは次の通りです:
User
|
v
LLM
|
| tool request
v
Agent Harness
|
v
MCP Client
|
v
MCP Server
|
v
Tool Implementation
|
v
Tool Result
|
+------------------> LLM責任は意図的に分離されています:
LLM - decides what it thinks should happen
Harness - manages the agent loop and conversation state
MCP - standardises tool discovery and invocation
Tools - perform the actual deterministic operationsMCP はどのツールを呼び出すべきかを決定しません。
ツールの選択は、周囲のアプリケーションが明示的に制約またはオーバーライドしない限り、モデルの決定に委ねられます。
Related MCP server: MCP Server Scaffold
このリポジトリが存在する理由
多くのエージェントフレームワークの用語は、実際に何が起こっているかを曖昧にすることがあります。
基本的なハーネスループは、次のようなものに過ぎません:
call model
|
v
did it request a tool?
|
/ \
no yes
| |
answer execute tool
|
v
return result
|
+----> call model againこのリポジトリは、そのメカニズムを大きなエージェントフレームワークの背後に隠すのではなく、見えるように保ちます。
リポジトリ構造
典型的な構造は次の通りです:
.
├── node/
│ ├── package.json
│ └── src/
│ ├── agent.ts
│ └── server.ts
│
└── python/
├── agent.py
└── server.pyディレクトリ名は正確に変更しても、アーキテクチャには影響しません。
例示 MCP ツール
デモサーバーは、意図的にシンプルな 3 つの仮想的なツールを公開します:
get_github_activity
get_site_content
contact_scottこれらはあくまで例であり、以下のことをデモンストレーションすることを目的としています:
ツール発見;
ツールスキーマ;
ツールの説明;
引数;
実行;
結果の処理。
実際のバックエンドを表すことを意図したものではありません。
Node.js / TypeScript
必要条件
Node.js 20+
OpenAI API キー
依存関係をインストール:
npm installAPI キーを設定:
export OPENAI_API_KEY="sk-..."エージェントを実行:
npm startMCP サーバーは、エージェントによって stdio トランスポートを介して自動的に起動されます。
サーバーを個別に実行する必要はありません。
出力例:
MCP tools: [
'get_github_activity',
'get_site_content',
'contact_scott'
]
MODEL REQUESTED TOOL: get_github_activity
ARGUMENTS: {}
MCP RESULT:
...
FINAL ANSWER
------------
Scott has recently been working on...Python
必要条件
Python 3.10+
OpenAI API キー
仮想環境を作成:
python3 -m venv .venv
source .venv/bin/activateパッケージングツールをアップグレード:
python3 -m pip install --upgrade pip setuptools wheel依存関係をインストール:
pip install "mcp>=2,<3" openaiAPI キーを設定:
export OPENAI_API_KEY="sk-..."実行:
python3 agent.pyPython バージョンはインタラクティブな CLI チャットボットとして実行されます:
MCP tools: ['get_github_activity', 'get_site_content', 'contact_scott']
Chat started.
Type /quit to exit.
You> hello
Assistant> Hello! How can I help?
You> What has Scott been working on?
[tool] get_github_activity({})
[result] ...
Assistant> Scott has recently been working on...Python クライアントは、ターン間の会話履歴を保持し、通常の応答を端末にストリーミングします。
Stdio トランスポート
これらの例では、stdio を介した MCP を使用しています。
エージェントは MCP サーバーを子プロセスとして起動します:
agent
|
+---- stdin/stdout ---- MCP serverこれはローカルでの実験に便利です。なぜなら:
別のサーバーデーモンが不要;
HTTP エンドポイントが不要;
ポート設定が不要;
追加の認証レイヤーが不要。
重要な結果の一つとして、MCP stdio サーバーは、任意のデバッグ出力を stdout に書き込んではいけません。
stdout は MCP プロトコルに属します。
診断には stderr を使用してください。
例えば:
print("debug information", file=sys.stderr)または TypeScript で:
console.error("debug information");エージェントハーネス
基本的なハーネスロジックは次の通りです:
while True:
response = await model(...)
calls = find_tool_calls(response)
if not calls:
return
for call in calls:
result = await mcp.call_tool(
call.name,
call.arguments,
)
add_result_to_context(result)実際のハーネスはさらに以下を実装する場合があります:
permissions
timeouts
tool allowlists
human approval
rate limits
cost limits
logging
tracing
context pruning
retry policies
authentication
authorization
sandboxing
validation
auditing
error recoveryこのデモは意図的にそれらをほとんど行いません。
ツール発見
ハーネスは、実装のハードコードされたリストを必要としません。
代わりに、MCP サーバーに利用可能なツールを問い合わせます。
概念的に:
MCP server
|
| tools/list
v
Agent harnessその後、ハーネスは結果の:
name
description
input schemaをモデルに公開します。
MCP サーバーが後で別のツールを追加した場合、ハーネスは別のカスタムディスパッチブランチを追加することなくそれを発見できます。
これが MCP が提供する主要なアーキテクチャ上の利点の一つです。
ツール選択は保証されない
この点は重要です。
サーバーが次のものを提供するとします:
contact_scott誰かが Scott を雇いたい、または連絡を取りたい場合に使用するべきであるという説明付き。
ユーザーが次のように言うかもしれません:
Can I hire Scott for consulting?望ましいモデルの動作は:
contact_scott(...)しかし、LLM は代わりに通常の会話応答を生成する可能性があります。
MCP はその問題を解決しません。
決定:
Does this natural-language request imply this tool?は依然として確率的なモデル推論です。
ツールの説明はルーティング動作を改善しますが、形式的な保証を生み出すわけではありません。
アクションが確定的に発生しなければならない場合、その要件は LLM の指示だけに頼るのではなく、通常のアプリケーションロジックで強制されるべきです。
なぜこれが重要か
モデルがツールを要求すると、システムの残りの部分は確定的になり得ます:
model requests tool
|
v
validate arguments
|
v
check permission
|
v
execute function
|
v
return resultしかし、最初の意味論的な決定は依然として確率的である可能性があります。
この区別は、次のような重大な結果を伴うアクションにとって特に重要です:
sending money
deleting data
changing permissions
submitting legal information
making purchases
sending messages
altering customer records本番システムは、意味のある結果を伴うアクションの周りに明示的な確定的制御を配置するべきです。
ストリーミング
Python CLI はストリーミングを使用するため、テキストが生成されるとすぐに表示されます。
ストリーミングなし:
You> explain virtual memory
<wait>
Assistant> Virtual memory is...ストリーミングあり:
You> explain virtual memory
Assistant> Virtual memory is...ストリーミングは主に知覚されるレイテンシを改善します。
ツールを使用するターンは、複数のモデルリクエストを必要とする可能性があるため、依然として時間がかかる場合があります:
model request
|
v
tool call
|
v
MCP execution
|
v
tool result
|
v
second model requestデモコード — 本番コードではありません
このリポジトリは意図的に最小限です。
本番エージェントシステムに期待される安全策を提供しません。
その他にも、本番コードでは以下を考慮する必要があります:
認証;
認可;
シークレット管理;
悪意のあるツール入力;
プロンプトインジェクション;
出力検証;
ツール結果の検証;
スキーマの強制;
リソース制限;
ネットワーク分離;
サブプロセスのセキュリティ;
重要な操作に対するユーザー確認;
監査ログ;
リトライ動作;
障害回復;
コスト管理;
コンテキストの成長;
モデルバージョンの変更;
API バージョンの変更;
依存関係の固定;
可観測性;
テストと評価;
プライバシーとデータ保持要件。
例示の MCP サーバーを信頼できないユーザーに直接公開したり、実際の通信のために contact_scott パターンを適切な検証、認証、永続化、悪用防止、エラーハンドリングを追加せずに使用しないでください。
繰り返します:
このリポジトリは学習と実験を目的としたデモコードであり、本番環境へのデプロイを意図したものではありません。
MCP はエージェントではない
レイヤーを分離しておくことは有用です:
MCP
!= LLM
MCP
!= agent
MCP
!= tool-selection logic
MCP
!= security policyMCP は能力を公開し呼び出すために使用されるプロトコルです。
ハーネスはモデル/ツールのループを管理します。
モデルは言語推論を実行します。
基礎となるツールが実際の作業を実行します。
有用なメンタルモデルは次の通りです:
Agent System
=
Model
+
Harness
+
Tools
+
Context
+
PolicyMCP はそれらのコンポーネント間の標準インターフェースを提供します。
なぜ直接関数を呼び出さないのか?
1 つのアプリケーション内の 3 つのローカル関数については、絶対に可能です。
例えば:
TOOLS = {
"foo": foo,
"bar": bar,
}は MCP よりもシンプルかもしれません。
MCP は、能力が複数のクライアント間で再利用可能である必要がある場合により興味深くなります:
MCP Server
/ | \
/ | \
/ | \
CLI agent IDE websiteツールプロバイダーは、特定のモデルホストやアプリケーションから独立します。
それが MCP を導入する主なアーキテクチャ上の理由です。
推奨される実験
基本的な CLI が動作したら、有用な実験には以下が含まれます:
run the same prompt repeatedly
change tool descriptions
change models
change system instructions
record selected tools
measure latency
measure token usage
add approval gates
add deliberately ambiguous prompts
add multiple MCP servers
introduce tool failures
introduce malformed results
limit maximum agent steps特に有用なテストの一つは、以下を記録することです:
prompt
selected tool
arguments
number of model calls
latency
final responseを繰り返し実行にわたって。
これにより、どの程度の変動がモデルから来るのか、どの程度の動作がハーネスによって制御可能かを調べることができます。
ライセンス
あなたのリポジトリに適したライセンスを追加してください。
最後に
このコードのポイントは、別の大規模なエージェントフレームワークを提供することではありません。
コアプロセスが理解できるように、メカニズムを明確に公開することです:
Model proposes.
Harness controls.
MCP connects.
Tools execute.より洗練されたものはすべて、その上に構築されています。
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
- Alicense-qualityDmaintenanceA demonstration server for the Model Context Protocol (MCP) that exposes calculator and Yahoo Finance tools, allowing LLMs to interpret natural language requests and make tool calls via the MCP standard.1Apache 2.0
- FlicenseBqualityDmaintenanceA basic starter project for building Model Context Protocol (MCP) servers that enables standardized interactions between AI systems and various data sources through secure, controlled tool implementations.2
- Alicense-qualityDmaintenanceA simple Model Context Protocol (MCP) server that allows GitHub Copilot to access custom tools, including an example tool to return the author name.MIT
- AlicenseCqualityDmaintenanceA Model Context Protocol (MCP) server that demonstrates how to build and implement custom tools for Claude using the mcp-framework.10ISC
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
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/Synaptechlabs/mcp-minimal-agent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server