Remote-MCP Server

Remote-MCP Server

启用与模型上下文协议服务的类型安全、双向通信,从而可以通过 HTTP 集中管理模型上下文。

通信
开发者工具
云平台
TypeScript
访问服务器

README

Remote-MCP:远程模型上下文协议

一个类型安全、双向且简单的解决方案,用于远程 MCP 通信,允许远程访问和集中管理模型上下文。

预览

架构

%%{init: {"flowchart": {"htmlLabels": false}} }%%
graph TD
    %% Modern, Bright Color Styling with white text
    classDef client fill:#22c55e,stroke:#059669,stroke-width:2px,color:#ffffff
    classDef gateway fill:#06b6d4,stroke:#0891b2,stroke-width:2px,color:#ffffff
    classDef backend fill:#f97316,stroke:#ea580c,stroke-width:2px,color:#ffffff
    classDef resource fill:#8b5cf6,stroke:#7c3aed,stroke-width:2px,color:#ffffff
    classDef server fill:#06b6d4,stroke:#0891b2,stroke-width:2px,color:#ffffff

    linkStyle default stroke:#64748b,stroke-width:1.5px,stroke-dasharray: 5 5

    %% Current MCP Setup (Multiple Local Servers)
    subgraph Current["当前设置(本地)"]
        direction LR
        subgraph ClientGroup["客户端"]
            A[客户端]:::client
        end

        subgraph Servers["本地 MCP 服务器"]
            direction TB
            B1["本地 MCP 服务器 (DB)"]:::server -->|"DB 访问"| C1[DB]:::resource
            B2["本地 MCP 服务器 (API 1)"]:::server -->|"API 访问"| C2["Web API 1"]:::resource
            B3["本地 MCP 服务器 (API 2)"]:::server -->|"API 访问"| C3["Web API 2"]:::resource
        end

        A -->|"MCP 协议"| B1
        A -->|"MCP 协议"| B2
        A -->|"MCP 协议"| B3
    end

    %% Vertical separator
    Current --> Proposed

    %% Proposed MCP Architecture (Decoupled)
    subgraph Proposed["提议架构(远程)"]
        direction LR
        D[客户端/主机]:::client -->|"MCP 协议"| E["本地 MCP 服务器 (@remote-mcp/client)"]:::server
        E <-->|"tRPC(HTTP)"| F["远程 MCP 服务器 (@remote-mcp/server)"]:::backend

        %% Separated Resources
        F -->|"DB 访问"| G1[DB]:::resource
        F -->|"API 访问"| G2["Web API 1"]:::resource
        F -->|"API 访问"| G3["Web API 2"]:::resource
    end

我为什么(现在)做这个

是的,我知道官方 MCP 路线图包括 2025 年第一季度对远程 MCP 的支持。但是,对于我来说,以及可能对于许多其他人来说,对远程访问的需求是迫切的。创建此库是为了弥合这一差距,提供一种现在从本地 MCP 客户端连接到远程 MCP 服务器的方法,而无需等待未来的官方实现。

注意:我不希望这是一个复杂或过于复杂的东西。这种方式现在就可以工作

快速开始

注意:此项目目前正在积极开发中,被认为是实验性的。预计会有重大更改和潜在问题。

客户端用法

使用公开发布的包

只需将以下代码放入您的 MCP 客户端设置中,在这里我以 Claude 为例:

{
  "mcpServers": {
    "remote-mcp": {
      "command": "npx",
      "args": ["-y", "@remote-mcp/client"],
      "env": {
        "REMOTE_MCP_URL": "http://localhost:9512",
        "HTTP_HEADER_Authorization": "Bearer <token>"
      }
    }
  }
}

编写您自己的本地 MCP 服务器

安装依赖:

$ npm install @remote-mcp/client @trpc/client@next zod

然后编写您自己的代码,如下所示:

import { RemoteMCPClient } from "@remote-mcp/client";

const client = new RemoteMCPClient({
  remoteUrl: "http://localhost:9512",

  onError: (method, error) => console.error(`Error in ${method}:`, error)
});

void client.start();

服务器用法(远程 MCP 实现)

您可以在 examples 目录中看到一些示例。

编写您自己的远程 MCP 服务器

npm install @remote-mcp/server 之后,您可以编写您自己的远程 MCP 服务器,如下所示:

import { MCPRouter, LogLevel } from "@remote-mcp/server";
import { createHTTPServer } from '@trpc/server/adapters/standalone';

import { z } from "zod";

// 创建路由器实例
const mcpRouter = new MCPRouter({
  logLevel: LogLevel.DEBUG,
  name: "example-server",
  version: "1.0.0",
  capabilities: {
    logging: {},
  },
});

// 添加示例工具
mcpRouter.addTool(
  "calculator",
  {
    description:
      "执行基本计算。加、减、乘、除。每次需要执行计算时都调用此方法。",
    schema: z.object({
      operation: z.enum(["add", "subtract", "multiply", "divide"]),
      a: z.string(),
      b: z.string(),
    }),
  },
  async (args) => {
    const a = Number(args.a);
    const b = Number(args.b);

    let result: number;
    switch (args.operation) {
      case "add":
        result = Number(a) + b;
        break;
      case "subtract":
        result = a - b;
        break;
      case "multiply":
        result = a * b;
        break;
      case "divide":
        if (b === 0) throw new Error("Division by zero");
        result = a / b;
        break;
    }

    return {
      content: [{ type: "text", text: `${result}` }],
    };
  },
);

const appRouter = mcpRouter.createTRPCRouter();

void createHTTPServer({
  router: appRouter,
  createContext: () => ({}),
}).listen(Number(process.env.PORT || 9512));

然后您可以在您的 MCP 客户端中看到如下内容:

<img src="https://github.com/user-attachments/assets/86cf500e-b937-47fc-9ac1-db106ab7a6a3" width="450">

此存储库包含:

  • @remote-mcp/client: 客户端库,充当本地 MCP 服务器,连接到远程实现。
  • @remote-mcp/server: 服务器库,用于创建可远程访问的 MCP 服务(用作远程实现)。

路线图

核心功能

  • [x] 基本的类型安全客户端/服务器通信
    • [x] 基本 MCP 命令支持
    • [x] 基本 MCP 工具支持
    • [x] 基本 MCP 提示支持
    • [ ] 崩溃安全处理(WIP,最高优先级)
  • [ ] 完整的事件订阅系统
    • [ ] 资源更改通知
    • [ ] 工具/提示列表更改通知
  • [ ] HTTP 标头支持
    • [x] 自定义标头
    • [ ] 身份验证中间件
  • [ ] 基本错误处理改进
  • [ ] 基本中间件支持

框架支持

  • [ ] Nest.js 集成 (@remote-mcp/nestjs)

高级功能

  • [ ] 双向通信
    • [ ] 服务器到客户端的请求
    • [ ] 服务器/客户端之间的资源共享
  • [ ] 基本监控和日志记录

贡献

欢迎贡献。有关详细信息,请参见 CONTRIBUTING.md

免责声明

该库是一个补充扩展,不是官方 MCP 规范的一部分,而是建立在现有 MCP 概念之上的。

许可证

该项目已获得 MIT 许可证的许可。 有关详细信息,请参见 LICENSE 文件。

参考

推荐服务器

Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Playwright MCP Server

Playwright MCP Server

提供一个利用模型上下文协议的服务器,以实现类人浏览器的自动化,该服务器使用 Playwright,允许控制浏览器行为,例如导航、元素交互和滚动。

精选
本地
TypeScript
MCP Package Docs Server

MCP Package Docs Server

促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。

精选
本地
TypeScript
Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
Apple MCP Server

Apple MCP Server

通过 MCP 协议与 Apple 应用(如“信息”、“备忘录”和“通讯录”)进行交互,从而使用自然语言发送消息、搜索和打开应用内容。

精选
本地
TypeScript
contentful-mcp

contentful-mcp

在你的 Contentful Space 中更新、创建、删除内容、内容模型和资源。

精选
TypeScript