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. 01组织系统、用户、步骤和资源上下文
  2. 02调用 OpenAI API 生成故事情节
  3. 03通过 API 动态添加角色
  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) 是一种提议中的格式,用于为大模型组织上下文信息。
它允许应用定义 system、user、steps 和 resources,以表示对话或项目的当前状态。

本项目展示了如何通过修改结构化上下文来设计大模型交互,而不是每次都重写提示词。


🔗 相关资源


评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。