MCP工具远程执行服务

通过Socket.IO提供MCP工具的远程执行能力,支持服务端和客户端组件,实现网络上的无缝交互。

  • by 3p3r
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 3p3r/elden-mcp

使用说明

埃尔登mcp

通过Socket IO远程执行MCP工具。

总结

此存储库是一个端到端的解决方案,通过Socket IO为模型上下文协议(MCP)工具提供远程执行功能。它包括服务器和客户端组件,实现了通过网络与MCP工具的无缝交互。

此实现要求并强制其用户使用OpenID Connect(OIDC)进行身份验证。JWT令牌既经过真实性验证,又用于将请求与特定用户及其连接的套接字相关联。

此实现允许每个有效的JWT令牌有一个套接字连接。

在MCP调用中交换一个套接字连接的ID,以确定哪个客户端应该执行工具逻辑。这是 自动添加到MCP工具注册中。

问题

假设你想描述以下MCP工具并将其暴露给你的AI代理:

// Confirm tool registered server-side
server.registerTool(
    'confirm',
    {
        title: 'Confirm Tool',
        description: 'Pops up for user confirmation',
        inputSchema: { message: z.string() },
        outputSchema: { result: z.boolean() }
    },
    // Confirm logic executed client-side
    async ({ message }) => {
        const output = new Promise<{ result: boolean }>((resolve) => {
            const confirmed = window.confirm(message);
            resolve({ result: confirmed });
        });
        return {
            content: [{ type: 'text', text: JSON.stringify(output) }],
            structuredContent: output.result
        };
    }
);

这通常是不可能的,但生成UI项目通常需要这样做。使用 window.confirm 需要浏览器上下文,这在服务器端不可用。

解决方案

使用elden-mcp,您可以在服务器端注册该工具,但可以在客户端执行它。服务器将工具执行请求转发给连接的客户端,客户端将运行工具逻辑并将结果返回给服务器。

在内部,工具函数被“提升”,并替换为Socket上的RPC调用。IO。客户端监听工具执行请求,运行工具逻辑,并将结果发送回服务器。

每个RPC调用都有两个部分,服务器和客户端。RPC调用的另一半也是自动生成的,可用于公开客户端逻辑。

实施

Elden mcp使用以下堆栈实现:

主要技术

  • 插座。输入:用于服务器和客户端之间的实时双向通信。
  • MCP-SDK:用于定义和执行模型上下文协议工具。
  • Next.js:用于构建服务器和客户端组件。
  • 更好的认证:用于在Next.js中处理OIDC身份验证。

次要技术

  • OpenID连接(OIDC):用于安全身份验证和授权。
  • SQLite:用于持久会话存储(通过better-splite3)。
  • 生物群系:用于代码格式化和linting。
  • 反应:用于构建客户端用户界面。
  • Node.js:用于服务器端JavaScript运行时。
  • TypeScript:用于类型安全和现代JavaScript功能。
  • 黄道:用于工具输入和输出的模式验证。

身份验证设置

Better Auth已配置为本地Keycloak实例的OIDC支持:

  • 配置:在中配置了OIDC提供程序 server/src/lib/auth.ts 使用 genericOAuth 插件
  • 数据库:SQLite数据库(server/database.sqlite)用于持久会话存储
  • API路线:身份验证端点可在 /api/auth/*
  • 健康检查:受保护的健康端点位于 /api/health 需要身份验证
  • 测试:全面的测试套件,包括单元和集成测试(集成测试需要Keycloak运行)
  • 文档:邮递员测试指南 server/POSTMAN_TESTING.md

安装程序使用来自的配置 elden-realm.json 默认情况下,环境变量覆盖可用。跑 npm run dev 从根目录启动Keycloak和Next.js服务器。

备注:SQLite数据库文件(database.sqlite)在第一次运行时自动创建,并被忽略。如果Keycloak不可用,集成测试将失败-在运行测试之前,请确保Keycloak正在运行。