Skip to main content
Glama
haode01

romate-mcp-server

by haode01

๐Ÿš€ romate-mcp-server

HTTP MCP Gateway โ€” ๅฐ†ๆœฌๅœฐ stdio MCP ๅทฅๅ…ทๆšด้œฒไธบ HTTP/SSE ๅ่ฎฎใ€‚

ไฝ ๅช้œ€่ฆ้…็ฝฎๆœฌๅœฐๆ‰ง่กŒ็š„ๅ‘ฝไปค๏ผŒromate-mcp-server ๅฐฑไผš่‡ชๅŠจๅฐ†ไปปๆ„ stdio MCP ๆœๅŠกๅ™จๆณจๅ†Œไธบ HTTP ็ซฏ็‚น๏ผŒ่ฎฉ่ฟœ็จ‹ๅฎขๆˆท็ซฏ๏ผˆๅฆ‚ Claude Desktopใ€Cline ็ญ‰๏ผ‰้€š่ฟ‡็ฝ‘็ปœ่ฐƒ็”จใ€‚


็‰นๆ€ง

็‰นๆ€ง

่ฏดๆ˜Ž

๐Ÿ”Œ ้›ถไปฃ็ ้›†ๆˆ

ๅช้œ€ YAML ้…็ฝฎๅ‘ฝไปค๏ผŒๆ— ้œ€ไฟฎๆ”นไปปไฝ• MCP ๆœๅŠกๅ™จไปฃ็ 

๐ŸŒ HTTP + SSE ๅŒๅ่ฎฎ

ๆ”ฏๆŒ Streamable HTTP ๅ’Œ Server-Sent Events ไธค็งไผ ่พ“ๆ–นๅผ

๐Ÿ”— ่šๅˆๆจกๅผ

ๅ•ไธ€่ทฏๅพ„่šๅˆๆ‰€ๆœ‰ๅทฅๅ…ท๏ผŒ่‡ชๅŠจ proxyName_toolName ๅ‰็ผ€่ทฏ็”ฑ

๐Ÿ” Bearer Token ้‰ดๆƒ

ๅฏ้€‰ Token ้‰ดๆƒ๏ผŒๆ”ฏๆŒๆŽ’้™ค่ทฏๅพ„

โ™ป๏ธ ่‡ชๅŠจ้‡ๅฏ

ๅญ่ฟ›็จ‹ๅดฉๆบƒๅŽ่‡ชๅŠจ้‡ๅฏ๏ผŒๆŒ‡ๆ•ฐ้€€้ฟ็ญ–็•ฅ

โฑ๏ธ ่ถ…ๆ—ถๆŽงๅˆถ

ๆกๆ‰‹่ถ…ๆ—ถ 10s๏ผŒๅทฅๅ…ท่ฐƒ็”จ่ถ…ๆ—ถ 60s

๐Ÿ”„ ้…็ฝฎ็ƒญ้‡่ฝฝ

็›‘ๅฌ้…็ฝฎๆ–‡ไปถๅ˜ๆ›ด๏ผŒ่‡ชๅŠจๅขžๅˆ ๆ”นไปฃ็†ๅฎžไพ‹

๐Ÿฉบ ๅฅๅบทๆฃ€ๆŸฅ

/health ๅ’Œ /tools ็ซฏ็‚น๏ผŒๅฎžๆ—ถ็›‘ๆŽง็Šถๆ€


Related MCP server: mcp_sdk_eyra_accelerator

ๅฟซ้€Ÿๅผ€ๅง‹

ๅฎ‰่ฃ…

git clone <your-repo> && cd romate-mcp-server
npm install
npm run build

้…็ฝฎ

ๅˆ›ๅปบ config.yaml๏ผš

server:
  port: 3100
  host: "0.0.0.0"
  auth:
    token: "your-secret-token"      # ๅฏ้€‰๏ผŒBearer Token ้‰ดๆƒ
    excludePaths:
      - "/health"                    # ๆ— ้œ€้‰ดๆƒ็š„่ทฏๅพ„

tools:
  - name: "filesystem"
    description: "ๆ–‡ไปถ็ณป็ปŸๆ“ไฝœๅทฅๅ…ท"
    command: "npx"
    args:
      - "-y"
      - "@modelcontextprotocol/server-filesystem"
      - "/tmp"
    restart: true
    restartDelay: 2000

  - name: "github"
    description: "GitHub API ๅทฅๅ…ท"
    command: "npx"
    args:
      - "-y"
      - "@modelcontextprotocol/server-github"
    env:
      GITHUB_TOKEN: "${GITHUB_TOKEN}"   # ๆ”ฏๆŒ็Žฏๅขƒๅ˜้‡ๆ’ๅ€ผ

ๅฏๅŠจ

# ๅผ€ๅ‘ๆจกๅผ๏ผˆ็ƒญ้‡่ฝฝ๏ผ‰
npm run dev -- ./config.yaml

# ็”Ÿไบงๆจกๅผ
npm run build
node dist/index.js ./config.yaml

่ทฏ็”ฑๆ€ป่งˆ

่ทฏๅพ„

ๆ–นๆณ•

่ฏดๆ˜Ž

/health

GET

ๅฅๅบทๆฃ€ๆŸฅ๏ผˆๆ— ้œ€้‰ดๆƒ๏ผ‰

/tools

GET

ๅˆ—ๅ‡บๆ‰€ๆœ‰ๅทฒๆณจๅ†Œๅทฅๅ…ท

/mcp/:toolName

POST

ๅ•ๅทฅๅ…ท Streamable HTTP

/mcp/:toolName/sse

GET

ๅ•ๅทฅๅ…ท SSE ็ซฏ็‚น

/mcp/:toolName/message?sessionId=

POST

ๅ•ๅทฅๅ…ท SSE ๆถˆๆฏ

/mcp

POST

่šๅˆๆจกๅผ โ€” ๆ‰€ๆœ‰ๅทฅๅ…ท็ปŸไธ€ๅ…ฅๅฃ

/mcp/sse

GET

่šๅˆๆจกๅผ SSE ็ซฏ็‚น

/mcp/message?sessionId=

POST

่šๅˆๆจกๅผ SSE ๆถˆๆฏ


ไฝฟ็”จ็คบไพ‹

ๅ•ๅทฅๅ…ทๆจกๅผ

# ๅˆ—ๅ‡บๅทฅๅ…ท
curl -H "Authorization: Bearer your-secret-token" \
  -H "Content-Type: application/json" \
  -X POST http://localhost:3100/mcp/filesystem \
  -d '{"method":"tools/list","id":1}'

# ่ฐƒ็”จๅทฅๅ…ท
curl -H "Authorization: Bearer your-secret-token" \
  -H "Content-Type: application/json" \
  -X POST http://localhost:3100/mcp/filesystem \
  -d '{
    "method": "tools/call",
    "params": {
      "name": "read_file",
      "arguments": { "path": "/tmp/test.txt" }
    },
    "id": 2
  }'

่šๅˆๆจกๅผ

่šๅˆๆจกๅผไธ‹๏ผŒๅทฅๅ…ทๅ่‡ชๅŠจๆทปๅŠ  {proxyName}_ ๅ‰็ผ€ไปฅ้ฟๅ…ๅ†ฒ็ช๏ผš

# ๅˆ—ๅ‡บๆ‰€ๆœ‰ๅทฅๅ…ท๏ผˆ่ฟ”ๅ›ž echo_echo, filesystem_read_file, github_search_repos ็ญ‰๏ผ‰
curl -H "Authorization: Bearer your-secret-token" \
  -H "Content-Type: application/json" \
  -X POST http://localhost:3100/mcp \
  -d '{"method":"tools/list","id":1}'

# ่ฐƒ็”จๅทฅๅ…ท โ€” ไฝฟ็”จ proxyName_toolName ๆ ผๅผ
curl -H "Authorization: Bearer your-secret-token" \
  -H "Content-Type: application/json" \
  -X POST http://localhost:3100/mcp \
  -d '{
    "method": "tools/call",
    "params": {
      "name": "filesystem_read_file",
      "arguments": { "path": "/tmp/test.txt" }
    },
    "id": 2
  }'

SSE ๆจกๅผ๏ผˆ้€‚็”จไบŽ Claude Desktop ็ญ‰ๅฎขๆˆท็ซฏ๏ผ‰

# 1. ๅฎขๆˆท็ซฏๅปบ็ซ‹ SSE ่ฟžๆŽฅ
GET /mcp/filesystem/sse
โ†’ event: endpoint
โ†’ data: http://localhost:3100/mcp/filesystem/message?sessionId=filesystem-1
โ†’ event: tools_list
โ†’ data: [...]

# 2. ๅฎขๆˆท็ซฏๅ‘ endpoint URL ๅ‘้€ JSON-RPC ่ฏทๆฑ‚
POST http://localhost:3100/mcp/filesystem/message?sessionId=filesystem-1
Content-Type: application/json

{"method":"tools/list","id":1}

# 3. ๅ“ๅบ”้€š่ฟ‡ SSE ่ฟžๆŽฅ่ฟ”ๅ›ž
โ†’ event: message
โ†’ data: {"jsonrpc":"2.0","result":{"tools":[...]},"id":1}

MCP ๅฎขๆˆท็ซฏ้…็ฝฎ

romate-mcp-server ๅ…ผๅฎนๆ‰€ๆœ‰ๆ”ฏๆŒ HTTP/SSE ไผ ่พ“็š„ MCP ๅฎขๆˆท็ซฏใ€‚ไปฅไธ‹ๆ˜ฏไธ€ไบ›ๅธธ่งๅฎขๆˆท็ซฏ็š„้…็ฝฎๆ–นๅผ๏ผš

Claude Desktop

ๅœจ claude_desktop_config.json ไธญๆทปๅŠ  MCP ๆœๅŠกๅ™จ้…็ฝฎ๏ผš

{
  "mcpServers": {
    "romate-filesystem": {
      "type": "sse",
      "url": "http://your-server:3100/mcp/filesystem/sse",
      "headers": {
        "Authorization": "Bearer your-secret-token"
      }
    },
    "romate-github": {
      "type": "sse",
      "url": "http://your-server:3100/mcp/github/sse",
      "headers": {
        "Authorization": "Bearer your-secret-token"
      }
    }
  }
}

Cline / Roo Code / Claude Dev

ๅœจ MCP ้…็ฝฎๆ–‡ไปถ๏ผˆ้€šๅธธไธบ ~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json ๆˆ–็ฑปไผผ่ทฏๅพ„๏ผ‰ไธญๆทปๅŠ ๏ผš

{
  "mcpServers": {
    "romate-filesystem": {
      "type": "sse",
      "url": "http://your-server:3100/mcp/filesystem/sse",
      "headers": {
        "Authorization": "Bearer your-secret-token"
      }
    }
  }
}

่šๅˆๆจกๅผๅฎขๆˆท็ซฏ้…็ฝฎ

ๅฆ‚ๆžœๅธŒๆœ›ๅœจไธ€ไธช SSE ่ฟžๆŽฅไธญ่ฎฟ้—ฎๆ‰€ๆœ‰ๅทฅๅ…ท๏ผŒไฝฟ็”จ่šๅˆ็ซฏ็‚น๏ผš

{
  "mcpServers": {
    "romate-all-tools": {
      "type": "sse",
      "url": "http://your-server:3100/mcp/sse",
      "headers": {
        "Authorization": "Bearer your-secret-token"
      }
    }
  }
}

ๆณจๆ„๏ผš่šๅˆๆจกๅผไธ‹ๅทฅๅ…ทๅไผšๅธฆๆœ‰ {proxyName}_ ๅ‰็ผ€๏ผŒไพ‹ๅฆ‚ filesystem_read_fileใ€github_search_reposใ€‚

่‡ชๅฎšไน‰ๅฎขๆˆท็ซฏ๏ผˆStreamable HTTP๏ผ‰

ๆ”ฏๆŒ MCP Streamable HTTP ไผ ่พ“็š„ๅฎขๆˆท็ซฏๅฏไปฅ็›ดๆŽฅไฝฟ็”จ POST ็ซฏ็‚น๏ผš

POST http://your-server:3100/mcp/filesystem
Content-Type: application/json
Authorization: Bearer your-secret-token

{"method":"tools/list","id":1}

้…็ฝฎๅ‚่€ƒ

server ้…็ฝฎ

ๅญ—ๆฎต

็ฑปๅž‹

้ป˜่ฎคๅ€ผ

่ฏดๆ˜Ž

port

number

3100

HTTP ็›‘ๅฌ็ซฏๅฃ

host

string

"0.0.0.0"

็›‘ๅฌๅœฐๅ€

auth.token

string

โ€”

Bearer Token๏ผŒไธ้…็ฝฎๅˆ™ไธๅฏ็”จ้‰ดๆƒ

auth.excludePaths

string[]

["/health"]

ๆ— ้œ€้‰ดๆƒ็š„่ทฏๅพ„ๅ‰็ผ€

tools[] ้…็ฝฎ

ๅญ—ๆฎต

็ฑปๅž‹

้ป˜่ฎคๅ€ผ

่ฏดๆ˜Ž

name

string

โ€”

ๅฟ…ๅกซใ€‚ๅทฅๅ…ทๅ”ฏไธ€ๆ ‡่ฏ†ๅ

description

string

""

ๅทฅๅ…ทๆ่ฟฐ

command

string

โ€”

ๅฟ…ๅกซใ€‚ๅฏๅŠจๅ‘ฝไปค

args

string[]

[]

ๅ‘ฝไปคๅ‚ๆ•ฐ

env

object

{}

็Žฏๅขƒๅ˜้‡๏ผŒๆ”ฏๆŒ ${VAR_NAME} ๆ’ๅ€ผ

cwd

string

โ€”

ๅทฅไฝœ็›ฎๅฝ•

restart

boolean

true

ๅดฉๆบƒๅŽๆ˜ฏๅฆ่‡ชๅŠจ้‡ๅฏ

restartDelay

number

2000

้‡ๅฏๅŸบ็ก€ๅปถ่ฟŸ(ms)๏ผŒๆŒ‡ๆ•ฐ้€€้ฟ x2๏ผŒไธŠ้™ 30s


ๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  HTTP Client                     โ”‚
โ”‚        (Claude Desktop, Cline, curl, etc.)       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚ HTTP/SSE
                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚              romate-mcp-server                   โ”‚
โ”‚                                                   โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚
โ”‚  โ”‚  Auth    โ”‚  โ”‚  Routes  โ”‚  โ”‚  Health  โ”‚       โ”‚
โ”‚  โ”‚ Middlewareโ”‚  โ”‚  /mcp/*  โ”‚  โ”‚  /health โ”‚       โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚
โ”‚                     โ”‚                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚            ProxyManager                      โ”‚ โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚ โ”‚
โ”‚  โ”‚  โ”‚ McpProxy โ”‚  โ”‚ McpProxy โ”‚  โ”‚ McpProxy โ”‚   โ”‚ โ”‚
โ”‚  โ”‚  โ”‚ (echo)   โ”‚  โ”‚(fs)      โ”‚  โ”‚(github)  โ”‚   โ”‚ โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚              โ”‚              โ”‚
           โ–ผ              โ–ผ              โ–ผ
     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
     โ”‚  stdio   โ”‚  โ”‚  stdio   โ”‚  โ”‚  stdio   โ”‚
     โ”‚ MCP ่ฟ›็จ‹ โ”‚  โ”‚ MCP ่ฟ›็จ‹ โ”‚  โ”‚ MCP ่ฟ›็จ‹ โ”‚
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅทฅไฝœๆต็จ‹

  1. ๅฏๅŠจ โ†’ ๅŠ ่ฝฝ YAML ้…็ฝฎ โ†’ ไธบๆฏไธชๅทฅๅ…ทๅˆ›ๅปบ McpProxy ๅฎžไพ‹

  2. ่ฟžๆŽฅ โ†’ ๆฏไธช McpProxy ้€š่ฟ‡ StdioClientTransport ๅฏๅŠจๅญ่ฟ›็จ‹ โ†’ ๅฎŒๆˆ MCP ๆกๆ‰‹ โ†’ ็ผ“ๅญ˜ tools/resources/prompts

  3. ไปฃ็† โ†’ HTTP ่ฏทๆฑ‚ๅˆฐ่พพ โ†’ ้‰ดๆƒ โ†’ ่ทฏ็”ฑๅˆฐๅฏนๅบ” McpProxy โ†’ JSON-RPC ่ฐƒ็”จ่ฝฌๅ‘ๅˆฐๅญ่ฟ›็จ‹ โ†’ ่ฟ”ๅ›ž็ป“ๆžœ

  4. ๅฎน้”™ โ†’ ๅญ่ฟ›็จ‹ๅดฉๆบƒ โ†’ onclose ่งฆๅ‘ โ†’ ๆŒ‡ๆ•ฐ้€€้ฟ่‡ชๅŠจ้‡ๅฏ๏ผˆrestart: true ๆ—ถ๏ผ‰

  5. ็ƒญ้‡่ฝฝ โ†’ ้…็ฝฎๆ–‡ไปถๅ˜ๆ›ด โ†’ ๅฏนๆฏ”ๆ–ฐๆ—ง้…็ฝฎ โ†’ ่‡ชๅŠจๅขž/ๅˆ /ๆ”นไปฃ็†ๅฎžไพ‹


ๅผ€ๅ‘

# ็ฑปๅž‹ๆฃ€ๆŸฅ
npm run typecheck

# ๅผ€ๅ‘ๆจกๅผ๏ผˆtsx watch ่‡ชๅŠจ้‡ๅฏ๏ผ‰
npm run dev -- ./config.yaml

# ๆž„ๅปบ
npm run build

# ็”ŸไบงๅฏๅŠจ
npm start -- ./config.yaml

่ฎธๅฏ่ฏ

MIT

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

โ€“Maintainers
โ€“Response time
โ€“Release cycle
โ€“Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    -
    quality
    C
    maintenance
    A dual-transport MCP server that exposes your API as tools to LLM clients, supporting both stdio transport for local clients like Claude Desktop and HTTP/SSE transport for remote clients like OpenAI's Responses API.
  • F
    license
    -
    quality
    D
    maintenance
    A standalone MCP server that exposes API endpoints as tools for AI assistants by proxying requests to a target API defined in an OpenAPI specification. It supports various authentication methods and utilizes Server-Sent Events (SSE) to facilitate integration with clients like Claude and ChatGPT.
  • A
    license
    -
    quality
    D
    maintenance
    Exposes any stdio-based MCP server to the internet via HTTP/SSE transport, enabling remote agents to access MCP tools over a network.
    16
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server exposing the Backtest360 engine API as tools for AI agents.

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoโ€ฆ

  • MCP server for Clipkit โ€” gives AI agents a video toolbox via the Clipkit schema.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/haode01/mcp-proxy-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server