使用说明
🛡 MCP-FORGE
用于模型上下文协议(MCP)的强大Node.js脚手架
现在有了持久的API密钥管理(SQLite)、带有密钥过期的实时仪表板和现代的TypeScript工具。
🚀 概述
MCP-FORGE是一个现代的、可扩展的Node.js服务器脚手架,用于使用模型上下文协议(MCP)构建应用程序。它提供了会话管理、API密钥处理、实时仪表板以及用于快速原型设计的简单工具集成。
✨ 特性
- MCP服务器集成(官方MCP SDK)
- 安全的API密钥管理
- 自动会话生命周期和清理
- 实时仪表板(服务器统计数据、日志、API密钥过期)
- 自定义工具系统
- Express.js中间件和路由
- TypeScript支持
- API键的SQLite数据库(
better-sqlite3) - 现代开发工作流程 TSX
- 用于格式化和起毛的生物特征
📋 目录
🛠 安装
先决条件
- Node.js(v18+)
- pnpm(推荐)或npm
注: 数据库文件 mcp.db 由git自动创建并忽略。
安装依赖项
pnpm install
🚀 快速开始
发展
pnpm run dev
# Uses tsx for fast TypeScript reloading
生产
pnpm start
⚡ 用法
启动时,MCP-FORGE会打印您的API密钥:
🔑 API Key for MCP (use as Authorization: Bearer <token>): sk-xxxxxxxx...
🕒 API Key Expires In: 23h 59m 59s
使用此键 Authorization 所有请求的标头。
示例:调用演示工具
基本问候语
{
"method": "tools/call",
"params": {
"name": "say_hello",
"arguments": {}
}
}
回应:“你好,世界!”
个性化问候
{
"method": "tools/call",
"params": {
"name": "say_hello",
"arguments": {
"name": "Alice"
}
}
}
回应:“你好,爱丽丝!”
🔧 配置
通过环境变量进行配置或 .env 文件:
| 变量 | 默认值 | 描述 |
|---|---|---|
| MCP_API_KEY | 生成 | 用于身份验证的API密钥 |
| PORT | 8000 | 服务器端口 |
| MCP_DISABLE_AUTH | false | 禁用API密钥身份验证 |
| MCP_KEY_PREFIX | sk- | 生成的API密钥的前缀 |
| MCP_KEY_BYTE_LENGTH | 32 | API密钥的长度(字节) |
| MCP_DB_PATH | MCP.DB | neneneba API键的SQLite DB文件 |
API密钥被存储并在24小时后自动导出。
📦 api参考
主要出口产品
loadConfig()–加载服务器配置generateApiKey(prefix, byteLength)–生成安全的API密钥setApiKey(key, createdAt)–将API密钥存储在数据库中getApiKey()–从数据库检索API密钥isApiKeyExpired(createdAt)–检查过期时间renewApiKey(config)–生成并存储新密钥findAvailablePort(startPort)–查找开放端口populateTools(server)–注册自定义工具cleanupSession(sessionId)–清理会议
如何添加工具
所有工具定义见 src/tools.ts。要添加新工具,请编辑 populateTools 功能和使用 server.tool().
🧰 工具函数
_makeRequest
用于生成API请求(GET、POST、自定义方法、请求主体、头)的助手。
签字:
const _makeRequest = async <T>(
api_url = API_URL,
{
method = "GET",
headers = {},
body = undefined,
}: {
method?: string;
headers?: HeadersInit;
body?: unknown;
} = {}
): Promise<T | null>
GET示例:
const result = await _makeRequest<MyType>("https://api.example.com/data");
POST示例:
const result = await _makeRequest<MyType>("https://api.example.com/data", {
method: "POST",
body: { key: "value" },
headers: { Authorization: "Bearer TOKEN" }
});
自动设置 Content-Type: application/json 对于非弦体。
返回解析的JSON或 null 错误。
示例:添加一个调用外部API的工具
// src/tools.ts
server.tool(
"get_todos",
"Retrieve a list of todos",
{},
async () => {
const todos = await _makeRequest<Array<{ id: string; name: string }>>("https://api.example.com/todos");
if (!todos || todos.length === 0) {
return { content: [{ type: "text", text: "No todos found." }] };
}
return {
content: [{ type: "text", text: todos.map(t => `ID: ${t.id}, Name: ${t.name}`).join("\n") }],
};
}
);
看 src/tools.ts 更多示例和细节。
🧪 测试
运行所有测试:
pnpm test
# All tests are TypeScript and cover DB logic, session management, and API endpoints.
🧹 代码质量
格式代码:
pnpm format
# Uses Biome for formatting
棉绒编码:
pnpm lint
# Uses Biome for linting
🤝 贡献
欢迎提交请求和问题!请在提交前运行测试和lint。
提示: 代码库完全是TypeScript,并使用SQLite进行持久的API密钥管理。看 src/db.ts 用于DB逻辑。
📄 许可证
麻省理工学院
MCP-FORGE --专为可扩展、上下文驱动的应用程序而设计。