克里斯(Chris)是Github的开发人员关系团队的热情开发人员倡导者和高级计划经理。他与最小的初创企业,建立企业,开源社区和个人开发人员的高管,工程领导和团队合作,帮助他们“帮助他们”,并解锁了他们的软件工程潜力。
作者:Chris Reddington
您是否曾经使用过AI工具并希望他们能够获得一些其他上下文?还是希望他们代表您执行行动?想想您与之合作的那些情况github副标士而且您需要它检查GitHub问题,运行剧作家测试或与API进行交互。默认情况下,这些AI工具无法访问这些外部系统。但这就是模型上下文协议(MCP)进来。这是扩展具有自定义功能的AI工具的标准化方法。
我想通过构建视觉和互动性来了解有关它的更多信息。因此,我创建了一个基于回合的游戏服务器,可让您使用MCP播放针对Copilot的TIC-TAC-TOE和岩石剪刀。
在我的最新消息中橡皮鸭星期四实时流,我浏览了该项目,该项目有一些组件,所有内容都用打字稿写:
您可以查看代码GitHub-Samples/基于回合的游戏MCP。这是我学到的。
您可以观看下面的完整流ð
即使有强大的AI代理,我们仍会继续遇到局限性:
要访问外部环境并采取行动,我们需要扩展这些AI工具的功能。但是在MCP之前,没有与第三方工具和服务集成的标准方法。您可能需要不同的插件和不同的集成模式,以实现所使用的任何AI工具。MCP通过提供一种标准方式将工具和功能插入支持模型上下文协议的任何工具。
MCP遵循大多数开发人员熟悉的客户服务器模式:
对于我的学习项目,我想要一些视觉效果,以显示整个MCP互动,并且当人们试图作为演讲的一部分解释时,可以重复使用。因此,我构建了一个带有TIC-TAC-TOE和Rock Paper剪刀的Web应用程序。但是,对手的动作不是让两个人在本地(或在线)或CPU进行的游戏,而是由MCP服务器策划了。
该体系结构包括:
我们在VS代码中注册MCP服务器,以便Copilot了解新的功能和工具。
魔术步骤是当您用MCP应用程序主机注册MCP服务器时(在我们的示例中,Visual Studio代码中的GitHub Copilot)。突然,您的AI代理可以访问这些服务器内置的功能。
您可以通过创建一个.VSCODE/MCP.JSON
文件。您可以在视觉工作室代码文档。
{“服务器”:{“剧作家”:{“命令”:“ npx”,“ args”:[[“@playwright/mcp@最新”这是给出的},,“基于转弯的游戏”:{“命令”:“节点”,“ args”:[“ dist/index.js”],“ CWD”:“ ./mcp-server”}}}
上面的配置在VS代码中告诉GitHub Copilot,我们想使用两个MCP服务器:
对于此实现,我将基于回合的游戏MCP服务器体系结构和逻辑相对简单,其中所有组件都在一个存储库中。这种MonorePo方法将Web应用程序,API和MCP服务器捆绑在一起,使其直接在本地克隆并运行整个系统,而无需复杂的依赖关系管理或跨重复设置。但是,对于更强大的设置,您可能会将该MCP服务器作为软件包(例如NPM或Docker Image)分发,并在此附近具有清晰的发布和版本控制过程。
通过构建这个项目,我熟悉了三个基本的MCP服务器概念:
定义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调用,通常是为了采取某种形式的操作(例如在基于回合的游戏中采取行动!)。
为人工智能收集上下文提供了一种方法,并且通常具有基于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){提出新错误(“找不到游戏”);}返回游戏;}
第三个概念是提示。您将非常熟悉提示和提示手工制作,这是您与GitHub Copilot(例如GitHub Copilot)互动的方式。您的用户可以编写自己的提示来使用您的工具,例如玩Tic Tac Toe的游戏或为我们范围范围的工作创建GitHub问题。
但是,您可能需要使用预定义的提示来运送MCP服务器,以帮助用户充分利用您的工具。例如,基于回合的游戏MCP带有多个提示:
您的用户可以通过VS代码中的Slash命令访问这些提示。例如,当我输入/战略
,我可以访问提示,要求提供有关给定游戏或难度级别的最佳游戏建议的建议。
尽管我的游戏演示非常简单,可以帮助您学习其中一些最初的概念,但这些模式适用于其他MCP服务器:
工具,资源和提示是MCP规范中一些最常用的功能。最近,将许多其他功能(包括采样和启发)添加到了规格中。我还没有机会添加它们,但也许它们是另一个流的一部分!
您可能需要根据场景来处理生产MCP服务器的身份验证和授权。例如,GitHub MCP服务器支持本地和远程中的远程MCP服务器和个人访问令牌的OAuth流动。基于回合的游戏MCP服务器旨在简单,并且不包括任何身份验证要求,但是如果您重新构建自己的MCP服务器,则安全性应该是关键的考虑因素。
您可能并不总是需要创建自己的MCP服务器。例如,GitHub寄出了自己的MCP服务器。为什么不为自己的版本创建自己的版本,而是不为上游做出开源贡献以改善所有人的体验呢?
思想ð€:在安装MCP服务器之前,请确保对MCP服务器进行尽职调查,就像您在项目供应链中的任何其他依赖性一样,您会像其他任何依赖一样。您认识出版商吗?您是否可以在开源存储库中查看(并为)代码进行审查?
MCP提供SDK用于多种语言,因此您可以在适合您的堆栈的任何技术中构建服务器,从打字稿到Python,去Rust等。我之所以选择打字稿,是因为我想要一个具有共享代码和通用语言的存储库中的整个演示(前端,后端和MCP服务器)。
您可以与MCP规范的演变保持最新在模型上下文协议文档上。
在这里,您可以从此探索中学到什么:
MCP只是与AI玩游戏(尽管很有趣)。这是关于打破AI助手与他们需要帮助您有效工作所需的系统之间的墙壁。
无论您是构建内部开发人员工具,与外部API集成或创建自定义工作流程,MCP都为您提供以一致,强大的方式扩展AI工具所需的基础。
想进一步探索MCP吗?这是一些实际的起点:
MCP的目的是为您的AI助手提供所需的工具,以在您的特定开发环境中真正帮助您。那么,您将使用哪种工具?您将建造什么?
克里斯(Chris)是Github的开发人员关系团队的热情开发人员倡导者和高级计划经理。他与最小的初创企业,建立企业,开源社区和个人开发人员的高管,工程领导和团队合作,帮助他们“帮助他们”,并解锁了他们的软件工程潜力。