MCP Model Provider Example

MCP Model Provider Example

Demonstrates a complete MCP server implementation supporting both local Ollama models and remote API models. Enables LangChain applications to dynamically discover and invoke tools including addition calculations and model invocation capabilities.

Category
访问服务器

README

MCP 模型提供商示例

这是一个完整的 MCP (Model Context Protocol) 示例项目,展示了如何搭建一个支持本地 Ollama 模型和远程 API 模型的 MCP 服务器,以及如何使用 LangChain 构建大模型应用来发现和调用 MCP 工具。

功能特性

  • 支持本地模型:通过 Ollama 部署的本地模型,无需 API 密钥
  • 支持远程模型:通过 API 密钥访问远程模型(如 OpenAI)
  • 动态工具发现:大模型可以自动发现 MCP 提供的工具
  • 工具调用:大模型可以根据需要调用 MCP 工具并获取结果
  • 加法计算工具:内置了一个计算两个数之和的工具
  • 模型调用工具:可以调用不同类型的语言模型

项目结构

e:\agents_pro\mcp\
├── package.json          # 项目配置和依赖
├── index.js              # MCP 服务器主文件
├── tools/                # 工具定义目录
│   ├── model_invoke.json # 模型调用工具定义
│   └── add_numbers.json  # 加法计算工具定义
├── example.js            # JavaScript 示例
├── langchain-app.py      # Python LangChain 应用示例
└── README.md             # 项目文档

安装步骤

1. 安装 Node.js 依赖

npm install

2. 安装 Python 依赖(用于 LangChain 应用)

pip install -r requirements.txt

3. 安装 Ollama(用于本地模型)

请访问 Ollama 官网 下载并安装 Ollama,然后运行以下命令拉取模型:

ollama pull llama2
ollama pull qwen3:4b

配置说明

1. MCP 服务器配置

  • 端口:默认运行在 3000 端口
  • 工具定义:在 tools/ 目录下定义工具
  • 模型配置
    • 本地模型:通过 Ollama 部署,默认地址为 http://localhost:11434
    • 远程模型:需要在代码中设置 API 密钥

2. LangChain 应用配置

  • 模型选择:默认使用本地 Ollama 模型 qwen3:4b
  • 远程模型:需要在 langchain-app.py 中设置 API 密钥

使用方法

1. 启动 MCP 服务器

npm start

服务器启动后,会在控制台输出以下信息:

MCP server running on port 3000
Tools available at: http://localhost:3000/mcp/tools
Invoke endpoint at: http://localhost:3000/mcp/invoke

2. 运行 JavaScript 示例

node example.js

3. 运行 Python LangChain 应用

python langchain-app.py

API 端点

1. 列出可用工具

请求

GET /mcp/tools

响应

{
  "tools": [
    {
      "name": "model_invoke",
      "description": "Invoke a language model with a prompt",
      "parameters": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "The prompt to send to the model"
          },
          "model_type": {
            "type": "string",
            "enum": ["local", "remote"],
            "description": "Model type: local (Ollama) or remote (API)"
          },
          "model_name": {
            "type": "string",
            "description": "Model name to use"
          },
          "api_key": {
            "type": "string",
            "description": "API key for remote model (required if model_type is remote)"
          }
        },
        "required": ["prompt", "model_type", "model_name"]
      }
    },
    {
      "name": "add_numbers",
      "description": "Calculate the sum of two numbers",
      "parameters": {
        "type": "object",
        "properties": {
          "num1": {
            "type": "number",
            "description": "The first number"
          },
          "num2": {
            "type": "number",
            "description": "The second number"
          }
        },
        "required": ["num1", "num2"]
      }
    }
  ]
}

2. 调用工具

请求

POST /mcp/invoke
Content-Type: application/json

{
  "tool": "model_invoke",
  "params": {
    "prompt": "你好,告诉我一个简短的笑话",
    "model_type": "local",
    "model_name": "llama2"
  }
}

响应

{
  "success": true,
  "data": {
    "response": "为什么人工智能不会感冒?因为它们没有病毒,只有bug!"
  }
}

示例场景

1. 大模型自动发现并使用加法工具

用户查询:"计算 123 加上 456 等于多少"

大模型流程

  1. 分析用户请求,发现需要进行加法计算
  2. 自动发现 MCP 提供的 add_numbers 工具
  3. 调用工具,传递参数 {"num1": 123, "num2": 456}
  4. 接收工具执行结果 {"sum": 579}
  5. 基于结果生成最终回答:"123 加上 456 等于 579"

2. 大模型使用模型调用工具

用户查询:"使用本地模型写一首关于春天的诗"

大模型流程

  1. 分析用户请求,发现需要使用模型生成内容
  2. 自动发现 MCP 提供的 model_invoke 工具
  3. 调用工具,传递参数 {"prompt": "写一首关于春天的诗", "model_type": "local", "model_name": "qwen3:4b"}
  4. 接收工具执行结果(模型生成的诗)
  5. 基于结果生成最终回答

注意事项

  1. 本地模型:使用本地 Ollama 模型时,需要确保 Ollama 服务正在运行
  2. 远程模型:使用远程模型时,需要在代码中设置有效的 API 密钥
  3. 工具定义:添加新工具时,需要在 tools/ 目录下创建工具定义文件,并在 index.js 中添加相应的处理函数
  4. 端口冲突:如果端口 3000 被占用,可以修改 index.js 中的端口配置

扩展建议

  1. 添加更多工具:可以根据需要添加更多工具,如天气查询、新闻获取等
  2. 支持更多模型:可以扩展 model_invoke 工具,支持更多类型的模型提供商
  3. 添加认证:可以为 MCP 服务器添加认证机制,确保只有授权的应用可以访问
  4. 添加日志:可以添加详细的日志记录,便于调试和监控

故障排除

1. 端口被占用

如果启动服务器时出现端口被占用的错误,可以使用以下命令查看并终止占用端口的进程:

# 查看占用端口 3000 的进程
netstat -ano | findstr :3000

# 终止进程(PID 为上一步输出的进程 ID)
taskkill /PID <PID> /F

2. 本地模型不可用

如果本地模型不可用,请检查:

  • Ollama 服务是否正在运行
  • 模型是否已经拉取(使用 ollama list 查看)
  • 模型名称是否正确

3. 远程模型调用失败

如果远程模型调用失败,请检查:

  • API 密钥是否正确
  • 网络连接是否正常
  • 模型名称是否正确

总结

本项目展示了如何搭建一个完整的 MCP 服务器,以及如何使用 LangChain 构建大模型应用来发现和调用 MCP 工具。通过这个项目,您可以了解:

  1. MCP 的基本概念和工作原理
  2. 如何定义和实现 MCP 工具
  3. 如何使用 LangChain 构建大模型应用
  4. 大模型如何自动发现和调用工具
  5. 如何支持本地和远程模型

这个项目可以作为一个基础框架,根据实际需求进行扩展和定制。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选