Skip to main content
Glama
codeExploreHub

MCP Model Provider Example

MCP 模型提供商示例

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

功能特性

  • 支持本地模型:通过 Ollama 部署的本地模型,无需 API 密钥

  • 支持远程模型:通过 API 密钥访问远程模型(如 OpenAI)

  • 动态工具发现:大模型可以自动发现 MCP 提供的工具

  • 工具调用:大模型可以根据需要调用 MCP 工具并获取结果

  • 加法计算工具:内置了一个计算两个数之和的工具

  • 模型调用工具:可以调用不同类型的语言模型

Related MCP server: Model Context Protocol Multi-Agent Server

项目结构

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. 如何支持本地和远程模型

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

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Demonstrates custom MCP servers for math and weather operations, enabling multi-agent orchestration using LangChain, Groq, and MCP adapters for both local and remote tool integration.
    1
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A demonstration MCP server that exposes basic arithmetic tools (add, subtract, ping) through FastAPI and shows how to integrate them with OpenAI's tool-calling API for LLM orchestration.
    -