埃尔登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((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正在运行。
