7.4 KiB
7.4 KiB
openmcp-sdk : openmcp 向けデプロイメントフレームワーク
実験室から本番環境まで、エージェントを瞬時に展開
導入 & インストール
openmcp-sdk.jsとは
OpenMCP Clientは統合されたMCPデバッグソリューションを提供しますが、それだけでは物足りません。
作成したmcpを配布可能なアプリにしたり、サーバー上で関数サービスやマイクロサービスとして展開したい場合、OpenMCP Clientがフロントエンドに大規模モデルとの連携やツール使用ロジックを実装しているため、困難が生じます。
openmcp-sdk.jsはこの問題に対する軽量ソリューションです。Node.jsライブラリとして、完成したmcpをシームレスにエージェントとして展開可能にします。
インストール
::: code-group
npm install openmcp-sdk
yarn add openmcp-sdk
pnpm add openmcp-sdk
:::
:::warning 現在openmcp-sdkはesmモードのインポートのみサポートしています :::
使用方法
ファイル名:main.ts
import { TaskLoop } from 'openmcp-sdk/task-loop';
import { TaskLoopAdapter } from 'openmcp-sdk/service';
async function main() {
// 通信とmcp接続を担当するアダプター作成
const adapter = new TaskLoopAdapter();
// mcpサーバー追加
adapter.addMcp({
connectionType: 'STDIO',
commandString: 'node index.js',
cwd: '~/projects/openmcp-tutorial/my-browser/dist'
});
// イベントループドライバー作成(verbose値が高いほど詳細なログを出力)
const taskLoop = new TaskLoop({ adapter, verbose: 1 });
// 全ツール取得
const tools = await taskLoop.getTools();
// 使用する大規模モデル設定
taskLoop.setLlmConfig({
id: 'deepseek',
baseUrl: 'https://api.deepseek.com/v1',
userToken: process.env['DEEPSEEK_API_TOKEN'],
userModel: 'deepseek-chat'
});
// コンテキスト作成と設定
const storage = {
messages: [],
settings: {
temperature: 0.7,
// 全てのツールを有効化
enableTools: tools,
// システムプロンプト
systemPrompt: 'you are a clever bot',
// 会話コンテキストのターン数
contextLength: 20
}
};
// 質問内容
const message = 'hello world';
// イベントループ開始
await taskLoop.start(storage, message);
// 最終回答を表示(messages.at(-1)に格納)
const content = storage.messages.at(-1).content;
console.log('最終回答:', content);
}
main();
esmモードで実行するには、まずTypeScriptのesmランチャーをインストール:
npm install tsx --save-dev
ファイルを実行:
npx tsx main.ts
出力例:
[6/5/2025, 8:16:15 PM] 🚀 [my-browser] 0.1.0 接続済み
[6/5/2025, 8:16:15 PM] タスクループが新規エポックを開始
[6/5/2025, 8:16:23 PM] タスクループがエポックを終了
[6/5/2025, 8:16:23 PM] 🤖 LLMがこれらのツールを呼び出し要求: k_navigate
[6/5/2025, 8:16:23 PM] 🔧 ツールk_navigateを呼び出し中
[6/5/2025, 8:16:34 PM] × ツール呼び出し失敗 McpError: MCP error -32603: net::ERR_CONNECTION_RESET at https://towardsdatascience.com/tag/editors-pick/
[6/5/2025, 8:16:34 PM] タスクループが新規エポックを開始
[6/5/2025, 8:16:40 PM] タスクループがエポックを終了
[6/5/2025, 8:16:40 PM] 🤖 LLMがこれらのツールを呼び出し要求: k_navigate
[6/5/2025, 8:16:40 PM] 🔧 ツールk_navigateを呼び出し中
[6/5/2025, 8:16:44 PM] ✓ ツール呼び出し成功
[6/5/2025, 8:16:44 PM] タスクループが新規エポックを開始
[6/5/2025, 8:16:57 PM] タスクループがエポックを終了
[6/5/2025, 8:16:57 PM] 🤖 LLMがこれらのツールを呼び出し要求: k_evaluate
[6/5/2025, 8:16:57 PM] 🔧 ツールk_evaluateを呼び出し中
[6/5/2025, 8:16:57 PM] ✓ ツール呼び出し成功
[6/5/2025, 8:16:57 PM] タスクループが新規エポックを開始
[6/5/2025, 8:17:06 PM] タスクループがエポックを終了
[6/5/2025, 8:17:06 PM] 🤖 LLMがこれらのツールを呼び出し要求: k_navigate, k_navigate
[6/5/2025, 8:17:06 PM] 🔧 ツールk_navigateを呼び出し中
[6/5/2025, 8:17:09 PM] ✓ ツール呼び出し成功
[6/5/2025, 8:17:09 PM] 🔧 ツールk_navigateを呼び出し中
[6/5/2025, 8:17:12 PM] ✓ ツール呼び出し成功
[6/5/2025, 8:17:12 PM] タスクループが新規エポックを開始
[6/5/2025, 8:17:19 PM] タスクループがエポックを終了
[6/5/2025, 8:17:19 PM] 🤖 LLMがこれらのツールを呼び出し要求: k_evaluate, k_evaluate
[6/5/2025, 8:17:19 PM] 🔧 ツールk_evaluateを呼び出し中
[6/5/2025, 8:17:19 PM] ✓ ツール呼び出し成功
[6/5/2025, 8:17:19 PM] 🔧 ツールk_evaluateを呼び出し中
[6/5/2025, 8:17:19 PM] ✓ ツール呼び出し成功
[6/5/2025, 8:17:19 PM] タスクループが新規エポックを開始
[6/5/2025, 8:17:45 PM] タスクループがエポックを終了
"以下は人気記事の整理済み情報(簡体中文訳):\n\n---\n\n### K1 タイトル\n**『データドリフトは真の問題ではない:監視戦略こそが鍵』**\n\n**概要**\n機械学習分野でデータドリフトはモデル性能低下の原因とされますが、本記事はこの常識を覆します。監視戦略の不備こそが核心的問題だと指摘。eコマース推薦システムや金融リスクモデルなどの実例を通じ、従来の統計的監視の限界を明らかにし、3層監視フレームワークを提案:\n1. **統計監視**: データ分布変化を迅速検知(初期信号として)\n2. **コンテキスト監視**: ビジネスロジックと連動、重要指標への影響を判定\n3. **行動監視**: モデル予測の実効果を追跡、「無音ドリフト」を防止\n\n技術指標依存ではなく、ビジネス目標と密接に連携した監視システムの重要性を強調。\n\n**原文リンク**\n[記事を読む](https://towardsdatascience.com/data-drift-is-not-the-actual-problem-your-monitoring-strategy-is/)\n\n---\n\n### K2 タイトル\n**『Jupyterからプログラマーへの速習ガイド』**\n\n**概要**\nデータサイエンティストや初心者向けに、Jupyter Notebookから専門的プログラミングへ移行する道筋を提示。VS Code、Git、Dockerなどのツール推奨と実践コード例で、Notebookの限界を超え、コードの保守性と拡張性を向上させる方法を解説。\n\n主なハイライト:\n- Notebookコードを再利用可能なPythonスクリプトへモジュール化\n- バージョン管理とコンテナ技術で開発フローを最適化\n- 実験的コードから本番級アプリケーションへの変換実例\n\n**原文リンク**\n[記事を読む](https://towardsdatascience.com/the-journey-from-jupyter-to-programmer-a-quick-start-guide/)\n\n---\n\n追加調整やコンテンツ補充が必要な場合はお知らせください!"