DeepSeek 上 OpenCode 中的 MCP:如何连接外部工具

Written by

in

MCP(模型上下文协议)是一种开放协议,描述如何将外部工具和数据源连接到语言模型:文件系统、文档、任务跟踪器、错误跟踪器或您自己的服务。您无需将每个工具嵌入到代理中,而是设置一个单独的 MCP 服务器,然后代理根据标准方案与其进行通信。

OpenCode 支持开箱即用的 MCP:本地服务器(由子进程启动)和远程服务器(可通过 HTTP 访问)。重要的一点是,整个MCP层是在OpenCode本身一侧实现的,而不是在模型提供者一侧实现的。因此,DeepSeek 在请求中将 MCP 工具作为正常功能接收,不需要了解协议本身的任何信息。

在这篇文章中,我将介绍如何添加本地和远程服务器、如何获得授权、如何不被令牌淹没,以及使用 DeepSeek 模型时要考虑的事项。

你需要什么

要工作,你需要三样东西:

  • 已安装 OpenCode。如果尚未配置代理,我会在单独的说明中讨论安装和连接 DeepSeek 的过程。
  • Node.js 和 npx。对于本地 MCP 服务器是必需的,它们作为 npm 包分发。
  • 访问密钥。仅适用于需要授权的远程服务器。像 Context7 这样的公共服务器无需密钥即可工作,但限制较低。

它是如何工作的

服务器在 mcp 块中的 OpenCode 配置中进行描述。每个服务器都有一个唯一的名称,可以通过该名称在请求中提及它。服务器工具使用此名称前缀注册,因此不同服务器之间不会发生冲突。

连接后,MCP 工具以及内置工具可供模型使用:读取文件、编辑代码和运行命令。从 DeepSeek 的角度来看,这些是代理可以调用​​的普通函数 – 这就是该捆绑包在模型 API 端无需任何 MCP 支持的情况下工作的原因。

本地服务器

熟悉该机制的最简单方法是测试服务器@modelcontextprotocol/server-everything。让我们将其添加到项目根目录中的 opencode.json 文件中:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mcp_everything": {
      "type": "local",
      "command": ["npx", "-y", "@modelcontextprotocol/server-everything"]
    }
  }
}

command 字段是服务器启动命令及其数组形式的参数。重新启动 OpenCode 后,这些工具将出现在会话中,并且可以明确要求:

используй инструмент mcp_everything, чтобы сложить 3 и 4

本地服务器还有几个更有用的字段。 environment 设置进程环境变量,cwd – 工作目录,timeout – 请求超时(以毫秒为单位),enabled 允许您临时禁用服务器而不将其从配置中删除。

远程服务器

远程服务器更方便:您不需要在本地运行任何内容,并且可以通过 URL 访问它们。 Context7 就是一个很好的例子,它会查找最新的库文档。它无需密钥即可连接:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "context7": {
      "type": "remote",
      "url": "https://mcp.context7.com/mcp"
    }
  }
}

如果您有免费的 Context7 帐户,关键是提高限制。标头通过 headers 块传输,将密钥本身保存在环境变量中很方便:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "context7": {
      "type": "remote",
      "url": "https://mcp.context7.com/mcp",
      "headers": {
        "CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
      }
    }
  }
}

{env:NAME} 构造在加载配置时替换环境变量的值,因此密钥不会最终出现在存储库中。在启动代理之前,必须在终端中导出变量。

另一个有用的公共服务器是 Vercel 的 Grep,在 GitHub 上搜索代码示例:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "gh_grep": {
      "type": "remote",
      "url": "https://mcp.grep.app"
    }
  }
}

通过 OAuth 授权

某些远程服务器需要 OAuth。 OpenCode 本身可以经历这个场景:它注意到 401 响应,触发授权并保存令牌。对于 Sentry,只需指定服务器:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sentry": {
      "type": "remote",
      "url": "https://mcp.sentry.dev/mcp",
      "oauth": {}
    }
  }
}

之后,可以手动启动授权 – 浏览器将打开:

opencode mcp auth sentry

服务命令在日常工作中也很有用。 opencode mcp list 显示服务器和授权状态,opencode mcp logout 删除存储的令牌,opencode mcp debug 检查特定服务器的网络连接和 OAuth 发现。令牌本地存储在文件 ~/.local/share/opencode/mcp-auth.json 中。

如果服务器不使用 OAuth,而是使用常规 API 密钥,则应禁用自动授权,否则 OpenCode 将尝试在不需要的地方传递 OAuth:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "my-api-key-server": {
      "type": "remote",
      "url": "https://mcp.example.com/mcp",
      "oauth": false,
      "headers": {
        "Authorization": "Bearer {env:MY_API_KEY}"
      }
    }
  }
}

工具管理

MCP 工具使用上下文:每个服务器将其功能的描述添加到请求中。因此,最好关闭很少需要的服务器。这可以通过 tools 块全局完成:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "my-mcp-foo": {
      "type": "local",
      "command": ["npx", "-y", "my-mcp-command-foo"]
    },
    "my-mcp-bar": {
      "type": "local",
      "command": ["npx", "-y", "my-mcp-command-bar"]
    }
  },
  "tools": {
    "my-mcp*": false
  }
}

my-mcp* 模板禁用名称以此前缀开头的所有工具。如果有很多服务器,则更有意义的是全局禁用它们并为特定代理在本地启用它们:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "my-mcp": {
      "type": "local",
      "command": ["npx", "-y", "my-mcp-command"],
      "enabled": true
    }
  },
  "tools": {
    "my-mcp*": false
  },
  "agent": {
    "my-agent": {
      "tools": {
        "my-mcp*": true
      }
    }
  }
}

DeepSeek 功能

与 DeepSeek 的连接之所以有效,是因为模型支持调用函数,并且它们的 MCP 工具看起来像普通函数。 DeepSeek 本身不连接 MCP 服务器,也不应该连接:连接由 OpenCode 处理。

您应该注意什么:

  • 选择模型。对于常规和小型编辑,deepseek-flash 就足够了。对于需要在头脑中保留大量上下文并仔细选择工具的任务,最好使用 deepseek-v4-pro。
  • 上下文大小。 像 GitHub MCP 这样的重型服务器会添加大量令牌,再加上大型项目,很容易达到限制。仅在特定任务期间打开它们。
  • 成本工具架构随每个请求一起发送,因此包含的服务器越多,每次迭代的成本就越高。您直接向提供商付款,因此额外的服务器费用会在您的账单上显而易见。
  • 对代理的提示。不要依赖模型的独创性,而是直接在请求中命名服务器或在 AGENTS.md 中编写规则会更安全。

AGENTS.md 的规则示例,以便代理本身访问所需的源:

Когда нужно посмотреть документацию библиотеки, используй инструменты context7.

实用食谱

对于日常工作,两台服务器通常就足够了:Context7 用于文档,一台窄服务器用于特定任务 – 例如,用于分析错误的 Sentry 或用于搜索代码示例的 Grep。最好将其余部分关闭并根据需要打开。

我的过程如下:我将服务器添加到 opencode.json,重新启动 OpenCode,通过 opencode mcp list 检查列表,然后提出一个明确提及服务器的测试问题。如果未调用该工具,我会查看 opencode mcp debug 和超时 – 缓慢的服务器可能没有时间在分配的 30 秒内响应。

需要注意什么

几个实际要点。 MCP 服务器是受信任的代码:本地服务器以您的权限在您的计算机上运行,​​并且您将请求数据发送到远程服务器。因此,从 Internet 安装随机服务器时应像任何第三方 CLI 一样谨慎。

将密钥和令牌保存在环境变量中,并且不要提交到存储库。 OpenCode 在本地存储 OAuth 令牌,但在共享计算机上,这也值得考虑:opencode mcp logout 在不再需要访问时删除它们。

还有一件事:不要一次打开所有东西。 MCP 为上下文添加了工具,而上下文就是金钱和响应质量。两到三台真正必要的服务器比为了以防万一而连接的十台服务器要好得多。

链接

https://opencode.ai/docs/mcp-servers/
https://opencode.ai/docs/config/
https://modelcontextprotocol.io/
https://github.com/upstash/context7
https://mcp.sentry.dev
https://mcp.grep.app
https://github.com/anomalyco/opencode

来源

https://opencode.ai/docs/mcp-servers/
https://modelcontextprotocol.io/
https://api-docs.deepseek.com/
https://api-docs.deepseek.com/quick_start/agent_integrations/opencode

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

DemensDeum
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.