SSE MCP客户端

一个TypeScript库,用于连接SSE类型的远程MCP服务器,提供类型安全和开箱即用的示例代码。

  • by BACH-AI-Tools
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 BACH-AI-Tools/typescript-sse-mcp-client

使用说明

TypeScript SSE MCP 客户端示例

在 TypeScript 代码中连接 SSE(Server-Sent Events)类型的远程 MCP 服务器。

⭐ 特点

✅ 远程连接:通过 HTTP/SSE 连接云端 MCP 服务器
✅ 类型安全:完整的 TypeScript 类型支持
✅ 开箱即用:完整示例代码,可直接运行
✅ 实用演示:包含 OpenFDA 药品数据库查询示例
✅ 详细文档:完整的使用指南和 API 说明

📦 项目结构

.
├── src/
│   ├── sse-client-example.ts  # SSE MCP 基础连接示例
│   └── openfda-demo.ts        # OpenFDA 实用查询示例
├── dist/                      # 编译后的 JavaScript 文件
├── SSE_MCP_GUIDE.md           # 详细使用指南
├── README.md                  # 本文件
├── package.json               # 项目配置
└── tsconfig.json              # TypeScript 配置

🚀 快速开始

1. 安装依赖

npm install

2. 编译 TypeScript

npm run build

3. 运行示例

# 测试基础连接(查看所有可用工具)
npm start

# 运行实用查询示例(药品信息查询)
npm run demo

# 或者直接运行(会自动编译)
npm run dev

💡 核心代码

连接 SSE MCP 服务器

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";

// 服务器配置
const serverUrl = "http://openfda.mcp.kaleido.guru/sse";
const headers = {
  "emcp-key": "YOUR_KEY",
  "emcp-usercode": "YOUR_CODE",
};

// 创建 SSE 传输层
const transport = new SSEClientTransport(new URL(serverUrl), {
  headers,
});

// 创建 MCP 客户端
const client = new Client(
  {
    name: "my-client",
    version: "1.0.0",
  },
  {
    capabilities: {},
  }
);

// 连接并调用
await client.connect(transport);

// 列出可用工具
const toolsList = await client.listTools();

// 调用工具
const result = await client.callTool({
  name: "tool_name",
  arguments: {
    param: "value",
  },
});

console.log(result.content[0].text);

// 关闭连接
await client.close();

🌟 OpenFDA 示例

项目包含完整的 OpenFDA(美国 FDA 药品数据库)查询示例:

可用工具

  1. search_drug_labels - 搜索 FDA 药品标签信息
  2. get_drug_adverse_reactions - 查询药品不良反应
  3. get_drug_warnings - 获取药品警告信息
  4. ae_pipeline_rag - RAG 药品安全分析
  5. get_drug_indications - 获取药品适应症

示例代码

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";

async function queryDrug(drugName: string): Promise<void> {
  const serverUrl = "http://openfda.mcp.kaleido.guru/sse";
  const headers = {
    "emcp-key": "DGBBWP0neHpDf8MH5l6QIVeRpmBOkZB1",
    "emcp-usercode": "2DebiJQI",
  };

  const transport = new SSEClientTransport(new URL(serverUrl), {
    headers,
  });

  const client = new Client(
    {
      name: "drug-query",
      version: "1.0.0",
    },
    {
      capabilities: {},
    }
  );

  await client.connect(transport);

  // 搜索药品
  const result = await client.callTool({
    name: "search_drug_labels",
    arguments: {
      search: drugName,
      limit: 5,
    },
  });

  console.log(result.content[0].text);

  await client.close();
}

// 运行
await queryDrug("aspirin");

📚 详细文档

查看 SSE_MCP_GUIDE.md 了解:

  • 完整的 API 文档
  • 所有工具的参数说明
  • 更多实用示例
  • 常见问题解答

🎯 使用场景

  • 云服务集成:连接远程 MCP API 服务
  • 数据查询:查询 OpenFDA、天气、股票等公共 API
  • AI 助手增强:为 Claude/Cursor 等提供外部工具
  • 企业应用:连接企业内部 MCP 服务器

📋 MCP 配置示例

如果要在 Cursor/Claude Desktop 中使用:

{
  "mcpServers": {
    "openfda": {
      "url": "http://openfda.mcp.kaleido.guru/sse",
      "headers": {
        "emcp-key": "YOUR_KEY",
        "emcp-usercode": "YOUR_CODE"
      },
      "type": "sse"
    }
  }
}

🔗 相关资源

📄 许可证

MIT License - 查看 LICENSE 文件了解详情

🤝 贡献

欢迎提交 Issue 和 Pull Request!

👤 作者

Feng Rongquan