ollama-MCP-server

ollama-MCP-server

A server that enables seamless integration between local Ollama LLM instances and MCP-compatible applications, providing advanced task decomposition, evaluation, and workflow management capabilities.

NewAITees

Developer Tools
Visit Server

README

ollama-MCP-server

Ollamaと通信するModel Context Protocol (MCP) サーバー

概要

このMCPサーバーは、ローカルのOllama LLMインスタンスとMCP互換アプリケーションの間でシームレスな統合を可能にし、高度なタスク分解、評価、ワークフロー管理を提供します。

主な機能:

  • 複雑な問題のタスク分解
  • 結果の評価と検証
  • Ollamaモデルの管理と実行
  • MCPプロトコルによる標準化された通信
  • 高度なエラー処理と詳細なエラーメッセージ
  • パフォーマンス最適化(コネクションプーリング、LRUキャッシュ)

コンポーネント

リソース

サーバーは以下のリソースを実装しています:

  • task:// - 個別のタスクにアクセスするためのURIスキーム
  • result:// - 評価結果にアクセスするためのURIスキーム
  • model:// - 利用可能なOllamaモデルにアクセスするためのURIスキーム

各リソースには、最適なLLMとの対話のための適切なメタデータとMIMEタイプが設定されています。

プロンプトとツールの関係

MCPサーバーでは、プロンプトとツールは密接に関連していますが、異なる役割を持っています。

  • プロンプト:LLMに特定の思考方法や構造を提供するスキーマ(Schema)のような役割
  • ツール:実際にアクションを実行するハンドラー(Handler)のような役割

各ツールには対応するスキーマ(プロンプト)が必要であり、これによりLLMの思考能力と実際のシステム機能を効果的に連携させることができます。

プロンプト

サーバーはいくつかの特殊なプロンプトを提供します:

  • decompose-task - 複雑なタスクを管理しやすいサブタスクに分解

    • タスクの説明と粒度レベルのオプションパラメータを取得
    • 依存関係と推定複雑性を含む構造化された内訳を返す
  • evaluate-result - 指定された基準に対してタスク結果を分析

    • 結果の内容と評価パラメータを取得
    • スコアと改善提案を含む詳細な評価を返す

ツール

サーバーはいくつかの強力なツールを実装しています:

  • add-task

    • 必須パラメータ: name (文字列), description (文字列)
    • オプションパラメータ: priority (数値), deadline (文字列), tags (配列)
    • システムに新しいタスクを作成し、その識別子を返す
    • 対応するスキーマ: タスク作成のためのデータ検証スキーマ
  • decompose-task

    • 必須パラメータ: task_id (文字列), granularity (文字列: "high"|"medium"|"low")
    • オプションパラメータ: max_subtasks (数値)
    • Ollamaを使用して複雑なタスクを管理可能なサブタスクに分解
    • 対応するスキーマ: 上記のdecompose-taskプロンプト
  • evaluate-result

    • 必須パラメータ: result_id (文字列), criteria (オブジェクト)
    • オプションパラメータ: detailed (ブール値)
    • 指定された基準に対して結果を評価し、フィードバックを提供
    • 対応するスキーマ: 上記のevaluate-resultプロンプト
  • run-model

    • 必須パラメータ: model (文字列), prompt (文字列)
    • オプションパラメータ: temperature (数値), max_tokens (数値)
    • 指定されたパラメータでOllamaモデルを実行
    • 対応するスキーマ: Ollamaモデル実行パラメータの検証スキーマ

新機能と改善点

拡張エラー処理

サーバーは、より詳細で構造化されたエラーメッセージを提供します。これにより、クライアントアプリケーションはエラーをより効果的に処理できます。エラーレスポンスの例:

{
  "error": {
    "message": "Task not found: task-123",
    "status_code": 404,
    "details": {
      "provided_id": "task-123"
    }
  }
}

パフォーマンス最適化

  • コネクションプーリング: 共有HTTP接続プールを使用することで、リクエストのパフォーマンスが向上し、リソース使用率が低減されます。
  • LRUキャッシュ: 同一または類似のリクエストに対する応答をキャッシュすることで、レスポンス時間が短縮され、Ollamaサーバーの負荷が軽減されます。

これらの設定は config.py で調整できます:

# パフォーマンス関連設定
cache_size: int = 100                 # キャッシュに保存する最大エントリ数
max_connections: int = 10             # 同時接続の最大数
max_connections_per_host: int = 10    # ホストごとの最大接続数
request_timeout: int = 60             # リクエストタイムアウト(秒)

モデル指定機能

概要

Ollama-MCP-Serverは、複数の方法でOllamaモデルを指定できる柔軟な機能を提供します。

モデル指定の優先順位

モデルは以下の優先順位で指定されます:

  1. ツール呼び出し時のパラメータ (model パラメータ)
  2. MCP設定ファイルの env セクション
  3. 環境変数 (OLLAMA_DEFAULT_MODEL)
  4. デフォルト値 (llama3)

MCP設定ファイルを使ったモデル指定

Claude Desktopなどのクライアントで使用する場合、MCP設定ファイルを使用してモデルを指定できます:

{
  "mcpServers": {
    "ollama-MCP-server": {
      "command": "python",
      "args": [
        "-m",
        "ollama_mcp_server"
      ],
      "env": [
        {"model": "llama3:latest"}
      ]
    }
  }
}

利用可能なモデルの確認

サーバー起動時に、設定されたモデルが存在するかチェックされます。モデルが見つからない場合は警告ログが出力されます。また、run-modelツールは利用可能なモデル一覧を返すため、ユーザーは有効なモデルを選択できます。

エラーハンドリングの改善

指定したモデルが存在しない場合や通信エラーが発生した場合、詳細なエラーメッセージが提供されます。エラーメッセージには利用可能なモデル一覧が含まれるため、ユーザーは素早く問題を解決できます。

テスト

プロジェクトには包括的なテストスイートが含まれています:

  • ユニットテスト: 個々のコンポーネントの機能をテスト
  • 統合テスト: エンドツーエンドのワークフローをテスト

テストを実行するには:

# すべてのテストを実行
python -m unittest discover

# 特定のテストを実行
python -m unittest tests.test_integration

設定

環境変数

OLLAMA_HOST=http://localhost:11434
DEFAULT_MODEL=llama3
LOG_LEVEL=info

Ollamaのセットアップ

Ollamaがインストールされ、適切なモデルで実行されていることを確認してください:

# Ollamaをインストール(まだインストールされていない場合)
curl -fsSL https://ollama.com/install.sh | sh

# 推奨モデルをダウンロード
ollama pull llama3
ollama pull mistral
ollama pull qwen2

クイックスタート

インストール

pip install ollama-mcp-server

Claude Desktop設定

MacOS

パス: ~/Library/Application\ Support/Claude/claude_desktop_config.json

Windows

パス: %APPDATA%/Claude/claude_desktop_config.json

<details> <summary>開発/未公開サーバーの設定</summary>

"mcpServers": {
  "ollama-MCP-server": {
    "command": "uv",
    "args": [
      "--directory",
      "/path/to/ollama-MCP-server",
      "run",
      "ollama-MCP-server"
    ],
    "ENV":["model":"deepseek:r14B"]
  }
}

</details>

<details> <summary>公開サーバーの設定</summary>

"mcpServers": {
  "ollama-MCP-server": {
    "command": "uvx",
    "args": [
      "ollama-MCP-server"
    ]
  }
}

</details>

使用例

タスク分解

複雑なタスクを管理可能なサブタスクに分解するには:

result = await mcp.use_mcp_tool({
    "server_name": "ollama-MCP-server",
    "tool_name": "decompose-task",
    "arguments": {
        "task_id": "task://123",
        "granularity": "medium",
        "max_subtasks": 5
    }
})

結果評価

特定の基準に対して結果を評価するには:

evaluation = await mcp.use_mcp_tool({
    "server_name": "ollama-MCP-server",
    "tool_name": "evaluate-result",
    "arguments": {
        "result_id": "result://456",
        "criteria": {
            "accuracy": 0.4,
            "completeness": 0.3,
            "clarity": 0.3
        },
        "detailed": true
    }
})

Ollamaモデルの実行

Ollamaモデルに対して直接クエリを実行するには:

response = await mcp.use_mcp_tool({
    "server_name": "ollama-MCP-server",
    "tool_name": "run-model",
    "arguments": {
        "model": "llama3",
        "prompt": "量子コンピューティングを簡単な言葉で説明してください",
        "temperature": 0.7
    }
})

開発

プロジェクトのセットアップ

  1. リポジトリをクローン:
git clone https://github.com/yourusername/ollama-MCP-server.git
cd ollama-MCP-server
  1. 仮想環境を作成してアクティベート:
python -m venv venv
source venv/bin/activate  # Windowsの場合: venv\Scripts\activate
  1. 開発依存関係をインストール:
uv sync --dev --all-extras

ローカル開発

プロジェクトには便利な開発用スクリプトが含まれています:

サーバーの実行

./run_server.sh

オプション:

  • --debug: デバッグモードで実行(ログレベル: DEBUG)
  • --log=LEVEL: ログレベルを指定(DEBUG, INFO, WARNING, ERROR, CRITICAL)

テストの実行

./run_tests.sh

オプション:

  • --unit: ユニットテストのみ実行
  • --integration: 統合テストのみ実行
  • --all: すべてのテストを実行(デフォルト)
  • --verbose: 詳細なテスト出力

ビルドと公開

パッケージを配布用に準備するには:

  1. 依存関係を同期してロックファイルを更新:
uv sync
  1. パッケージの配布物をビルド:
uv build

これにより、dist/ディレクトリにソースとホイールの配布物が作成されます。

  1. PyPIに公開:
uv publish

注: PyPI認証情報を環境変数またはコマンドフラグで設定する必要があります:

  • トークン: --tokenまたはUV_PUBLISH_TOKEN
  • またはユーザー名/パスワード: --username/UV_PUBLISH_USERNAME--password/UV_PUBLISH_PASSWORD

デバッグ

MCPサーバーはstdioを介して実行されるため、デバッグは難しい場合があります。最適なデバッグ 体験のために、MCP Inspectorの使用を強く推奨します。

npmを使用してMCP Inspectorを起動するには、次のコマンドを実行します:

npx @modelcontextprotocol/inspector uv --directory /path/to/ollama-MCP-server run ollama-mcp-server

起動時、Inspectorはブラウザでアクセスしてデバッグを開始できるURLを表示します。

アーキテ

貢献

貢献は歓迎します!お気軽にプルリクエストを提出してください。

  1. リポジトリをフォーク
  2. 機能ブランチを作成 (git checkout -b feature/amazing-feature)
  3. 変更をコミット (git commit -m 'Add some amazing feature')
  4. ブランチにプッシュ (git push origin feature/amazing-feature)
  5. プルリクエストを開く

ライセンス

このプロジェクトはMITライセンスの下でライセンスされています - 詳細はLICENSEファイルを参照してください。

謝辞

  • 優れたプロトコル設計を提供したModel Context Protocolチーム
  • ローカルLLM実行をアクセス可能にしたOllamaプロジェクト
  • このプロジェクトのすべての貢献者

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
MCP Package Docs Server

MCP Package Docs Server

Facilitates LLMs to efficiently access and fetch structured documentation for packages in Go, Python, and NPM, enhancing software development with multi-language support and performance optimization.

Featured
Local
TypeScript
Claude Code MCP

Claude Code MCP

An implementation of Claude Code as a Model Context Protocol server that enables using Claude's software engineering capabilities (code generation, editing, reviewing, and file operations) through the standardized MCP interface.

Featured
Local
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

Model Context Protocol server for Task Management. This allows Claude Desktop (or any MCP client) to manage and execute tasks in a queue-based system.

Featured
Local
JavaScript
Linear MCP Server

Linear MCP Server

Enables interaction with Linear's API for managing issues, teams, and projects programmatically through the Model Context Protocol.

Featured
JavaScript
mermaid-mcp-server

mermaid-mcp-server

A Model Context Protocol (MCP) server that converts Mermaid diagrams to PNG images.

Featured
JavaScript
Jira-Context-MCP

Jira-Context-MCP

MCP server to provide Jira Tickets information to AI coding agents like Cursor

Featured
TypeScript
Linear MCP Server

Linear MCP Server

A Model Context Protocol server that integrates with Linear's issue tracking system, allowing LLMs to create, update, search, and comment on Linear issues through natural language interactions.

Featured
JavaScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

This server facilitates structured problem-solving by breaking down complex issues into sequential steps, supporting revisions, and enabling multiple solution paths through full MCP integration.

Featured
Python