关于 🧠 Simple MCP Server with Node.js
这是一个使用 Node.js 和 Express 构建的 MCP 原型服务,通过结构化上下文调用 OpenAI API 生成故事情节,适合探索上下文变化如何影响 LLM 输出的开发者。它还支持通过 API 动态添加角色。
主要功能
- 01组织系统、用户、步骤和资源上下文
- 02调用 OpenAI API 生成故事情节
- 03通过 API 动态添加角色
- 04查看上下文对模型响应的影响
适用场景
- 01根据设定生成故事情节建议
- 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 的响应
📦 环境要求
- Node.js v18+
- npm
- OpenAI API 密钥(在此获取)
🛠 设置
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
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。