英语轻松读发新版了,欢迎下载、更新

构建第一个MCP服务器:如何使用自定义功能扩展AI工具

2025-08-22 16:59:54 英文原文

作者:Chris Reddington

您是否曾经使用过AI工具并希望他们能够获得一些其他上下文?还是希望他们代表您执行行动?想想您与之合作的那些情况github副标士而且您需要它检查GitHub问题,运行剧作家测试或与API进行交互。默认情况下,这些AI工具无法访问这些外部系统。但这就是模型上下文协议(MCP)进来。这是扩展具有自定义功能的AI工具的标准化方法。 

我想通过构建视觉和互动性来了解有关它的更多信息。因此,我创建了一个基于回合的游戏服务器,可让您使用MCP播放针对Copilot的TIC-TAC-TOE和岩石剪刀。

在我的最新消息中橡皮鸭星期四实时流,我浏览了该项目,该项目有一些组件,所有内容都用打字稿写:

  • next.js Web应用程序和API,旨在为了演示/学习目的本地运行
  • 使用的MCP服务器MCP打字标记SDK
  • 一个共享类型定义和组件的共享库,这些库在Web应用程序,API和MCP服务器上重复使用

您可以查看代码GitHub-Samples/基于回合的游戏MCP。这是我学到的。

您可以观看下面的完整流ð

为什么MCP对开发人员很重要

即使有强大的AI代理,我们仍会继续遇到局限性:

  • AI工具可以访问私人数据检索增强产生,就像我们的GitHub存储库中的信息一样。
  • 他们无法访问最新的文档或实时数据。
  • 代理可以执行诸如创建拉动请求,在本地运行应用程序上探索UI或与API交互之类的操作。

要访问外部环境并采取行动,我们需要扩展这些AI工具的功能。但是在MCP之前,没有与第三方工具和服务集成的标准方法。您可能需要不同的插件和不同的集成模式,以实现所使用的任何AI工具。MCP通过提供一种标准方式将工具和功能插入支持模型上下文协议的任何工具。

MCP遵循大多数开发人员熟悉的客户服务器模式:

  • 主持人:您使用的AI工具,例如VS代码中的GitHub Copilot(您会注意到VS代码中的Copilot在MCP功能支持矩阵)。主机通过客户端启动与您的MCP服务器的连接。
  • 客户:客户直播主机应用程序(例如,VS代码中的Github Copilot),与服务器有1:1的关系。 当VS代码连接到新的MCP服务器(例如GitHub,剧作家或基于回合的游戏MCP服务器,我们在这篇文章中谈论)时,创建了一个新客户端来维护连接。
  • 服务器:您提供工具,资源和提示的自定义MCP服务器。就我们而言,我们制作了一台MCP服务器,该服务器提供了玩基于转弯的游戏的功能! 

构建基于回合的游戏MCP服务器

对于我的学习项目,我想要一些视觉效果,以显示整个MCP互动,并且当人们试图作为演讲的一部分解释时,可以重复使用。因此,我构建了一个带有TIC-TAC-TOE和Rock Paper剪刀的Web应用程序。但是,对手的动作不是让两个人在本地(或在线)或CPU进行的游戏,而是由MCP服务器策划了。

该体系结构包括:

  • Next.js前端:我进行动作的游戏界面
  • API路由(Next.js实施的一部分):用于游戏状态管理的后端逻辑,由前端和MCP服务器拨打。MCP服务器
  • :处理AI游戏移动的打字稿服务器共享库
  • :跨组件使用的常见游戏逻辑在实践中它是如何工作的:

我们在VS代码中注册MCP服务器,以便Copilot了解新的功能和工具。

  1. 我在VS代码中与GitHub Copilot进行了互动。
  2. 我可以明确调用工具,或者副驾驶可以自动发现它们。
  3. Copilot称大语言模型。基于提示上下文和可用工具,它可以调用MCP服务器。
  4. MCP服务器执行请求的工具(例如在游戏中进行移动)并返回结果。
  5. Copilot使用这些结果继续对话。

魔术步骤是当您用MCP应用程序主机注册MCP服务器时(在我们的示例中,Visual Studio代码中的GitHub Copilot)。突然,您的AI代理可以访问这些服务器内置的功能。

A screenshot of an MCP server configuration with the turn-based-game MCP server running. It shows a popup listing several tools from the MCP server including analyze_game, create_rock_paper_scissors_game, create_tic_tac_toe_game, play_rock_paper_scissor, play_tic_tac_toe and wait_for_player_move.

在VS代码中设置MCP服务器

您可以通过创建一个.VSCODE/MCP.JSON文件。您可以在视觉工作室代码文档

{“服务器”:{“剧作家”:{“命令”:“ npx”,“ args”:[[“@playwright/mcp@最新”这是给出的},,“基于转弯的游戏”:{“命令”:“节点”,“ args”:[“ dist/index.js”],“ CWD”:“ ./mcp-server”}}}

上面的配置在VS代码中告诉GitHub Copilot,我们想使用两个MCP服务器:

  • 作为NPM软件包本地执行的剧作MCP服务器。
  • 基于回合的游戏MCP服务器,该服务器根据我们的工作目录中的编译打字稿代码在本地运行服务器。

对于此实现,我将基于回合的游戏MCP服务器体系结构和逻辑相对简单,其中所有组件都在一个存储库中。这种MonorePo方法将Web应用程序,API和MCP服务器捆绑在一起,使其直接在本地克隆并运行整个系统,而无需复杂的依赖关系管理或跨重复设置。但是,对于更强大的设置,您可能会将该MCP服务器作为软件包(例如NPM或Docker Image)分发,并在此附近具有清晰的发布和版本控制过程。 

MCP的三个核心构建块

通过构建这个项目,我熟悉了三个基本的MCP服务器概念:

1。工具:您的人工智能可以采取的动作工具

定义MCP服务器可以执行的操作。在我的游戏服务器中,我指定了以下工具:

  • Analyze_game:获取任何游戏的当前状态
  • create_rock_paper_scissors_game:开始新的岩石剪刀游戏
  • create_tic_tac_toe_game:开始新的TIC-TAC-TOE游戏
  • play_rock_paper_scissors:在岩石剪刀中做出AI选择
  • play_tic_tac_toe:在TIC-TAC-TOE中进行AI举动
  • wait_for_player_move:调查终点,直到玩家采取行动

每个工具都有一个清晰的描述和输入架构,该架构告诉AI要提供的参数:

{名称:'play_tic_tac_toe',描述:'在TIC-TAC-TOE游戏中采取AI举动。重要的是:在游戏仍在玩时调用此工具后,您必须致电WAIT_FOR_FLAYER_MOVE继续游戏流程。Inputschema:{类型:“对象”,特性: {gameid:{类型:“字符串”,描述:“要玩的TIC-TAC-TOE游戏的ID”,},,},,必需:['gameid'],},,},,

GitHub Copilot和大型语言模型(LLM)art arter计算实际游戏的移动。当Copilot调用PLAY_TIC_TAC_TOE工具时,MCP服务器会为运行CPU游戏逻辑的特定工具执行处理程序,例如在使用难度时进行tic tac tac Toe的随机移动或更为最佳的算法。

换句话说,工具是可重复使用的软件,可以由AI调用,通常是为了采取某种形式的操作(例如在基于回合的游戏中采取行动!)。

2。资源:您的人工智能可以访问的上下文资源

为人工智能收集上下文提供了一种方法,并且通常具有基于URI的标识符。例如,我实施了自定义URI方案,例如:

  • game:// tic-tac-toe:列出所有TIC-TAC-TOE游戏
  • game:// tic-tac-toe/{game-id}:获取特定的TIC TAC TOE游戏的状态
  • 游戏://岩石剪辑器:列出所有岩石剪刀游戏
  • game:// rock-paper-scissors/{game-id}:获取特定岩石剪刀的特定游戏

作为MCP资源文档说明,您可以选择如何通过这些资源。在我们基于回合的游戏MCP服务器中,有一种方法将资源URI转换为API调用到本地API服务器并通过原始响应传递,以便可以在工具调用中用作上下文(例如玩游戏)。

异步函数readgameresource(uri){const Gamessession =等待callbackendapi(GameType,gameID);如果(!gamesession){提出新错误(“找不到游戏”);}返回游戏;}

3。提示:用户可重复使用的指南

第三个概念是提示。您将非常熟悉提示和提示手工制作,这是您与GitHub Copilot(例如GitHub Copilot)互动的方式。您的用户可以编写自己的提示来使用您的工具,例如玩Tic Tac Toe的游戏或为我们范围范围的工作创建GitHub问题。

但是,您可能需要使用预定义的提示来运送MCP服务器,以帮助用户充分利用您的工具。例如,基于回合的游戏MCP带有多个提示:

  • 策略指南不同的难度级别
  • 游戏规则和最佳游戏说明
  • 对常见方案的故障排除帮助

您的用户可以通过VS代码中的Slash命令访问这些提示。例如,当我输入/战略,我可以访问提示,要求提供有关给定游戏或难度级别的最佳游戏建议的建议。

现实世界的应用和考虑因素

尽管我的游戏演示非常简单,可以帮助您学习其中一些最初的概念,但这些模式适用于其他MCP服务器:

  • GitHub MCP服务器:从现有的GitHub问题或提取请求,列出DiDeDabot警报或创建和管理问题并拉出请求,所有这些都基于您通过OAuth(在远程MCP服务器中)或个人访问令牌提供的访问。
  • 剧作家MCP服务器:自动导航到浏览器中的特定页面,单击并与页面进行交互,捕获屏幕截图并检查渲染的内容。
  • 自定义API服务器:连接到您的内部服务,数据库或业务逻辑。

MCP规范的其他功能

工具,资源和提示是MCP规范中一些最常用的功能。最近,将许多其他功能(包括采样和启发)添加到了规格中。我还没有机会添加它们,但也许它们是另一个流的一部分!

身份验证和安全性

您可能需要根据场景来处理生产MCP服务器的身份验证和授权。例如,GitHub MCP服务器支持本地和远程中的远程MCP服务器和个人访问令牌的OAuth流动。基于回合的游戏MCP服务器旨在简单,并且不包括任何身份验证要求,但是如果您重新构建自己的MCP服务器,则安全性应该是关键的考虑因素。

信任第三方MCP服务器

您可能并不总是需要创建自己的MCP服务器。例如,GitHub寄出了自己的MCP服务器。为什么不为自己的版本创建自己的版本,而是不为上游做出开源贡献以改善所有人的体验呢?

思想ð€:在安装MCP服务器之前,请确保对MCP服务器进行尽职调查,就像您在项目供应链中的任何其他依赖性一样,您会像其他任何依赖一样。您认识出版商吗?您是否可以在开源存储库中查看(并为)代码进行审查?

语言和SDK选项

MCP提供SDK用于多种语言,因此您可以在适合您的堆栈的任何技术中构建服务器,从打字稿到Python,去Rust等。我之所以选择打字稿,是因为我想要一个具有共享代码和通用语言的存储库中的整个演示(前端,后端和MCP服务器)。

您可以与MCP规范的演变保持最新在模型上下文协议文档上

随身携带

在这里,您可以从此探索中学到什么:

  • MCP标准化AI工具的可扩展性跨不同平台和应用程序(例如Visual Studio代码中的Copilot)
  • 首先重复使用通过调查可用的现有MCP服务器。查看MCP服务器:您是否识别发布者,您可以访问代码吗?
  • 建立自己的?启动简单使用解决特定问题而不是尝试一次建立所有问题的专注服务器
  • 这三个构建块(工具,资源,提示)提供了设计MCP服务器功能的明确框架

MCP只是与AI玩游戏(尽管很有趣)。这是关于打破AI助手与他们需要帮助您有效工作所需的系统之间的墙壁。 

无论您是构建内部开发人员工具,与外部API集成或创建自定义工作流程,MCP都为您提供以一致,强大的方式扩展AI工具所需的基础。

下一步

想进一步探索MCP吗?这是一些实际的起点:

  • 查看GitHub MCP服务器在您自己的工作流中使用或了解有关现实世界中MCP服务器实现的更多信息。
  • 尝试剧作家MCP服务器用于UI测试工作流程。
  • 为您的内部API或开发工具构建简单的服务器。您可以查看基于转弯的游戏MCP例如。
  • 尝试编码团队最佳实践的自定义提示。

MCP的目的是为您的AI助手提供所需的工具,以在您的特定开发环境中真正帮助您。那么,您将使用哪种工具?您将建造什么?


写的

Chris Reddington

克里斯(Chris)是Github的开发人员关系团队的热情开发人员倡导者和高级计划经理。他与最小的初创企业,建立企业,开源社区和个人开发人员的高管,工程领导和团队合作,帮助他们“帮助他们”,并解锁了他们的软件工程潜力。

关于《构建第一个MCP服务器:如何使用自定义功能扩展AI工具》的评论


暂无评论

发表评论

摘要

模型上下文协议(MCP)是扩展具有具有自定义功能(例如访问外部系统或执行操作的自定义功能)的AI工具的标准。它允许AI代理与私人数据,文档,API等进行交互。MCP的关键组成部分包括: - **工具**:AI可以采取的操作,由清晰的描述和输入模式定义。 - **资源**:提供基于URI的标识符的上下文,用于访问游戏状态或GitHub问题之类的信息。 - **提示**:可重复使用的指南,以便用户有效与AI工具进行交互。MCP遵循客户端服务器模式,其中AI工具连接到自定义MCP服务器。此设置可增强各种应用程序中的AI功能,从游戏和UI测试到与内部API和开发工具集成。该协议支持多种编程语言,并鼓励可重复使用和社区贡献。