mcpField
🧠
🧠 Simple MCP Server with Node.js

🧠 Simple MCP Server with Node.js

ローカル
github.com/takehisa10098開発ツール179 週間前に更新

🧠 Simple MCP Server with Node.js について

Node.jsとExpressで構築されたMCPのプロトタイプで、構造化したコンテキストを使ってOpenAI APIから物語の筋書きを生成します。コンテキストがLLMの応答に与える影響を調べる開発者向けで、API経由のキャラクター追加にも対応します。

主な機能

  1. 01system、user、steps、resourcesの構成
  2. 02OpenAI APIで筋書きを生成
  3. 03API経由でキャラクターを追加
  4. 04コンテキストによる応答の変化を確認

活用シーン

  1. 01物語の設定から筋書き案を生成
  2. 02キャラクターや制約を変えて出力を比較

MCP 対応

MCPサーバーのプロトタイプと説明されています。READMEではMCPをLLMコンテキストの構成形式として説明していますが、MCPクライアント向けのツールや接続方法は記載されていません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

🧠 Node.js を使ったシンプルな MCP サーバー

これは、Node.js と Express で構築された Model Context Protocol(MCP) サーバーのシンプルなプロトタイプです。
OpenAI の API と連携し、たとえば物語の執筆を支援するような、コンテキストを認識するアシスタントをシミュレートします。


🚀 できること

  • system、user、steps、resources を使ってコンテキストを構成する
  • OpenAI API を呼び出し、コンテキストを使って物語の筋書きを生成する
  • API 経由でキャラクターを動的に追加する
  • コンテキストの変更が LLM の応答に与える影響を確認する

📦 必要なもの


🛠 セットアップ

1. このリポジトリをクローンする
git clone https://github.com/takehisa10098/plot-mcp-server.git
cd plot-mcp-server
2. 依存関係をインストールする
npm install
3. .env ファイルを作成する
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
4. context.json ファイルを作成する
{
  "system": "あなたは小説執筆のサポートAIです。",
  "user": {
    "goal": "和風ファンタジーの短編小説を書きたい",
    "constraints": ["文字数は3000字以内", "テーマは『喪失と再生』"]
  },
  "steps": [
    { "name": "キャラクター作成", "status": "done" },
    { "name": "プロット生成", "status": "in_progress" }
  ],
  "resources": {
    "characters": [
      { "name": "アカネ", "role": "主人公", "trait": "寡黙で芯が強い" }
    ],
    "world": "戦国時代風の異世界。陰陽術が存在する。"
  }
}
5. server.js を作成する
const express = require('express');
const fs = require('fs');
const dotenv = require('dotenv');
const { getPlotSuggestion } = require('./openai');

dotenv.config();
const app = express();
app.use(express.json());

const PORT = 3000;
const CONTEXT_PATH = './context.json';

const readContext = () => JSON.parse(fs.readFileSync(CONTEXT_PATH, 'utf-8'));

app.get('/context', (req, res) => {
  const context = readContext();
  res.json(context);
});

app.post('/step/plot', async (req, res) => {
  const context = readContext();
  const plot = await getPlotSuggestion(context);
  res.json({ plot });
});

app.post('/update/characters', (req, res) => {
  const context = readContext();
  const newCharacter = req.body;

  if (!newCharacter.name || !newCharacter.role || !newCharacter.trait) {
    return res.status(400).json({ error: 'name, role, and trait are required' });
  }

  context.resources.characters.push(newCharacter);
  fs.writeFileSync(CONTEXT_PATH, JSON.stringify(context, null, 2), 'utf-8');
  res.json({ message: 'Character added', character: newCharacter });
});

app.listen(PORT, () => {
  console.log(`MCP server running at http://localhost:${PORT}`);
});
6. openai.js を作成する
const { OpenAI } = require('openai');
require('dotenv').config();

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

async function getPlotSuggestion(context) {
  const { system, user, resources } = context;

  const messages = [
    { role: 'system', content: system },
    {
      role: 'user',
      content: `
目標: ${user.goal}
制約: ${user.constraints.join(', ')}

キャラクター: ${JSON.stringify(resources.characters)}
世界観: ${resources.world}

これを踏まえて、小説のプロット案を出してください。
      `
    }
  ];

  const res = await openai.chat.completions.create({
    model: 'gpt-4-turbo',
    messages,
  });

  return res.choices[0].message.content;
}

module.exports = { getPlotSuggestion };

🧪 使い方

サーバーを起動する
node server.js
現在のコンテキストを取得する
curl http://localhost:3000/context
筋書きを生成する
curl -X POST http://localhost:3000/step/plot
新しいキャラクターを追加する
curl -X POST http://localhost:3000/update/characters \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ユキ",
    "role": "謎の旅人",
    "trait": "静かで何かを知っているような雰囲気"
  }'

💡 MCP とは?

Model Context Protocol(MCP)は、LLM 向けのコンテキスト情報を構造化するために提案された形式です。
アプリケーションはこれを使って、会話やプロジェクトの現在の状態を表す system、user、steps、resources を定義できます。

このプロジェクトでは、プロンプトを毎回書き直すのではなく、構造化されたコンテキストを変更することで、LLM とのやり取りを設計する方法を紹介します。


🔗 関連リンク


コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。