Skip to main content
Glama
Synaptechlabs

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 operations

MCP はどのツールを呼び出すべきかを決定しません

ツールの選択は、周囲のアプリケーションが明示的に制約またはオーバーライドしない限り、モデルの決定に委ねられます。

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 install

API キーを設定:

export OPENAI_API_KEY="sk-..."

エージェントを実行:

npm start

MCP サーバーは、エージェントによって 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" openai

API キーを設定:

export OPENAI_API_KEY="sk-..."

実行:

python3 agent.py

Python バージョンはインタラクティブな 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 policy

MCP は能力を公開し呼び出すために使用されるプロトコルです。

ハーネスはモデル/ツールのループを管理します。

モデルは言語推論を実行します。

基礎となるツールが実際の作業を実行します。

有用なメンタルモデルは次の通りです:

Agent System
=
Model
+
Harness
+
Tools
+
Context
+
Policy

MCP はそれらのコンポーネント間の標準インターフェースを提供します。

なぜ直接関数を呼び出さないのか?

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.

より洗練されたものはすべて、その上に構築されています。

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    -
    quality
    D
    maintenance
    A 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.
    1
    Apache 2.0
  • F
    license
    B
    quality
    D
    maintenance
    A 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
  • A
    license
    -
    quality
    D
    maintenance
    A simple Model Context Protocol (MCP) server that allows GitHub Copilot to access custom tools, including an example tool to return the author name.
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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