模型上下文协议演示服务器

一个模块化、可扩展的MCP演示服务器,适用于本地开发参考或生产构建基础。

  • by Akashshelke07
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 akashshelke07/mcp-demo-server

使用说明

MCP演示服务器

A完整 模型上下文协议(MCP) 演示服务器——模块化、可扩展,随时可用作本地开发参考或生产构建的基础。

注: 这个存储库是一个演示实现:工具和资源包括模拟和示例。当与真实服务集成时,用真实的API调用和安全配置替换mock实现。


特性

  • 🛠️ 工具

    • API工具 -获取或模拟外部API数据(天气、新闻、报价)
    • 数学工具 --运行算术和高级数学运算
    • 数据库工具 --查询模拟数据库以获取用户数据和分析
  • 📊 资源

    • 系统日志 --用于调试的结构化JSON日志和错误报告
    • 用户配置文件 --示例用户配置文件数据和首选项
  • 💬 提示

    • 数据分析 --构建结构化数据分析提示
    • 报告生成 --创建报表模板和呈现助手
    • 系统故障排除 --指导性故障排除提示和步骤
  • ✅ 输入验证、结构化错误、JSON日志记录和可扩展插件模型。


快速开始

1.安装

# Create project folder and install dependencies
mkdir mcp-demo-server
cd mcp-demo-server
# Copy files from the artifact into this folder
npm install

2.配置

# Copy env template
cp .env.example .env
# Edit .env for your environment and API keys
nano .env

支持的环境变量(默认值为 .env.example):

  • PORT --服务器端口(默认 3000)
  • LOG_LEVEL — info|debug|warn|error
  • NODE_ENV — development|production
  • WEATHER_API_KEY -可选外部API密钥
  • DATABASE_PATH --启用时指向SQLite(或其他数据库)的路径
  • LOGS_PATH --日志JSON文件的路径
  • PROFILES_PATH --配置文件JSON文件的路径

3.运行服务器

# Start server
npm start
# Development mode (auto-restart)
npm run dev

4.使用示例客户端进行测试

# Run example tests / client
npm test

项目结构

mcp-demo-server/
├── src/
│   ├── server.js          # Main MCP server bootstrap and routing
│   ├── tools/             # Tool implementations (api-tool, math-tool, db-tool)
│   ├── resources/         # Resource implementations (logs, profiles)
│   ├── prompts/           # Prompt templates and generators
│   └── utils/             # Utilities (logger, config, validators)
├── data/                  # Sample data files (mock DB, profiles, logs)
├── tests/                 # Unit/integration test files and example clients
├── .env.example           # Example environment variables
├── package.json           # Node dependencies and scripts
└── README.md              # This file

使用示例

调用工具(示例客户端代码段)

// Math calculations
await client.callTool({
  name: 'calculate_math',
  arguments: { operation: 'add', numbers: [10, 20, 30] }
});

// API data fetching (mocked or real if configured)
await client.callTool({
  name: 'fetch_api_data',
  arguments: { endpoint: 'weather', params: { city: 'Tokyo' } }
});

// Database queries
await client.callTool({
  name: 'query_database',
  arguments: { query_type: 'select', table: 'users', limit: 5 }
});

阅读资源

const logs = await client.readResource({ uri: 'logs://system' });
const profiles = await client.readResource({ uri: 'profiles://users' });

生成提示

const prompt = await client.getPrompt({
  name: 'analyze_data',
  arguments: { data_source: 'logs', analysis_type: 'summary' }
});

扩展服务器

添加新工具

  1. 在中创建新文件 src/tools/ (例如。, my-tool.js).
  2. 导出具有以下形状的工具对象:
export const myTool = {
  name: 'my_custom_tool',
  description: 'Does something useful',
  inputSchema: { /* JSON Schema */ },
  async execute(args) { /* return { success: boolean, data } */ }
};
  1. 将工具导入并添加到中的工具注册表 src/server.js.

添加新资源

  1. 在中创建新文件 src/resources/.
  2. 使用导出资源对象 uri, name, description, mimeType,以及 read 功能。
  3. 在服务器资源注册表中注册资源。

添加新提示

  1. 扩展 src/prompts/index.js 其中包含一个新的提示对象 name, description和a generate 功能。

集成

API集成

  • 获取实际服务的API密钥
  • 更新 src/tools/api-tool.js 进行真正的HTTP调用
  • 添加错误处理、缓存和速率限制

数据库集成

  • 安装驱动程序或ORM(例如。, sqlite3, pg, mysql2)
  • 更新 src/tools/database-tool.js 使用真实的连接池和查询
  • 对输入进行消毒并使用参数化语句

日志记录和错误处理

  • 所有工具执行和资源访问都记录在结构化JSON中。
  • 错误包括上下文和堆栈跟踪(尊重 NODE_ENV).
  • 服务器被设计为在单个工具发生故障时继续运行——错误以标准化的格式向客户端显示。

安全考虑

  • 验证并清理工具/资源的所有输入。
  • 将机密存储在环境变量或机密管理器中——不要提交密钥。
  • 在公开服务器时添加身份验证和授权。
  • 对调用外部API的工具端点实施速率限制。

测试

  • 现场单元测试 tests/ 并且可以与一起运行 npm test.
  • 包括输入验证、工具执行和资源读取的测试。

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 添加测试和文档
  4. 打开一个包含明确更改描述的拉取请求

请遵循语义提交消息,并保持PR的专注。


许可证

MIT许可证——见 LICENSE 了解详情。


支持

如果您遇到问题:

  • 检查日志(路径由配置 LOGS_PATH).
  • 验证 .env 配置和API密钥。
  • 在中运行示例客户端 tests/ 重现问题。
  • 审查MCP规范的预期行为。

对于功能请求或帮助,请打开问题或提交PR。


此README是作为MCP演示服务器的单个请求README文件生成的。没有其他文件被更改。