MCP server for AgileX Robotics product docs

Agilex docs MCP

by wgjsg · MIT license · updated Nov 4

Agilex docs MCP cover

MCP server for AgileX Robotics (松灵机器人) product docs — manuals, CAN protocol, firmware and FAQ. Read-only, Streamable HTTP, no auth.

# AGILEX Docs MCP

[![MCP](https://img.shields.io/badge/MCP-streamable--http-blue)](https://modelcontextprotocol.io)
[![Registry](https://img.shields.io/badge/registry-ai.agilex.service%2Fdocs-green)](https://registry.modelcontextprotocol.io/v0.1/servers?search=agilex)
[![License](https://img.shields.io/badge/license-MIT-lightgrey)](LICENSE)
[![Auth](https://img.shields.io/badge/auth-none-brightgreen)](#rate-limits)

Official product documentation for **AgileX Robotics (松灵机器人)** — user manuals,
CAN 2.0B protocol references, firmware notes, SDK tech posts and after-sales FAQ for
`piper`, `pika`, `nero`, `ranger`, `limo`, `scout`, `bunker`, `hunter`, `tracer`,
`umr`, `cobot_magic` and `aloha`.

Point your AI coding assistant at this server **before** writing integration code
for AgileX hardware, so it consults the real manual instead of guessing baud rates,
frame formats or pinouts.

> **This repository documents the public interface.** It covers the endpoint,
> the tool signatures and every client configuration. The indexing service that

Overview

[](https://modelcontextprotocol.io) [](https://registry.modelcontextprotocol.io/v0.1/servers?search=agilex) [](LICENSE) [](#rate-limits)

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • README.md16.8 KB
Read README.md here
wgjsg/main1 file
README.md
Show the full text487 lines

AGILEX Docs MCP

MCP Registry License Auth

Official product documentation for AgileX Robotics (松灵机器人) — user manuals, CAN 2.0B protocol references, firmware notes, SDK tech posts and after-sales FAQ for piper, pika, nero, ranger, limo, scout, bunker, hunter, tracer, umr, cobot_magic and aloha.

Point your AI coding assistant at this server before writing integration code for AgileX hardware, so it consults the real manual instead of guessing baud rates, frame formats or pinouts.

This repository documents the public interface. It covers the endpoint, the tool signatures and every client configuration. The indexing service that backs it is operated by AgileX and is not part of this repository.


Endpoint

MCP URL https://service.agilex.ai/agilex-docs/mcp
Transport Streamable HTTP — single endpoint, stateless
Protocol 2025-11-25 (also answers 2025-06-18, 2025-03-26, 2024-11-05)
Auth None. Read-only public docs, rate limited per IP
Registry ai.agilex.service/docs
Docs page https://service.agilex.ai/agilex-docs/
Health https://service.agilex.ai/agilex-docs/health

No API key, no OAuth, no local process. If your client speaks Streamable HTTP, you only need the URL.


Quick start

Clients are listed in order of how common they are. Pick one.

# Client Setup
1 Claude Code claude mcp add --scope user --transport http agilex-docs https://service.agilex.ai/agilex-docs/mcp
2 Codex CLI codex mcp add agilex-docs --url https://service.agilex.ai/agilex-docs/mcp
3 Cursor one-click install, or the JSON below
4 VS Code / Copilot Ctrl+Shift+P → MCP: Add Server → HTTP → paste the URL
5 Anything stdio-only npx -y mcp-remote https://service.agilex.ai/agilex-docs/mcp
# 1) Claude Code — all projects
claude mcp add --scope user --transport http agilex-docs https://service.agilex.ai/agilex-docs/mcp

# 2) Codex CLI — writes ~/.codex/config.toml
codex mcp add agilex-docs --url https://service.agilex.ai/agilex-docs/mcp

Cursor one-click:

cursor://anysphere.cursor-deeplink/mcp/install?name=agilex-docs&config=eyJ1cmwiOiJodHRwczovL3NlcnZpY2UuYWdpbGV4LmFpL2FnaWxleC1kb2NzL21jcCJ9

Any client that reads mcpServers (Cursor, Claude Desktop, Cline, Windsurf, Cherry Studio, Continue, Zed, LibreChat, Dify …):

{
  "mcpServers": {
    "agilex-docs": {
      "url": "https://service.agilex.ai/agilex-docs/mcp"
    }
  }
}

Full per-client instructions: docs/CLIENTS.md.


Tools

Five read-only tools. The names are deliberately verb_noun so a model can pick the right one without reading the schema first.

Tool Purpose Parameters
search_docs Full-text search. Start here. Locate before reading. query (include the product name), limit (1–25, default 8), space (optional)
find_in_doc Locate a passage inside one long manual; returns absolute offset doc_id, query, limit (1–10, default 5)
get_doc Read one page as Markdown, paginated doc_id, max_chars (default 20 000, honoured as requested, max 120 000), offset
list_docs Inventory of a single space space (optional), limit (1–300, default 100), offset (≥0)
list_spaces All public spaces with page counts —

search_docs returns doc_id, title, space, url, score, chars and a snippet. Then use find_in_doc to jump to the passage you need and read it with get_doc(doc_id, offset=…). If the response has truncated: true, call get_doc again with next_offset.

Manuals open with a cover page and preface, so reading from offset 0 rarely answers a specific question — that is why the search-then-locate-then-read path is the recommended one rather than get_doc alone.

max_chars is honoured as requested (1–120 000), and the applied value is echoed back as max_chars in the response. There used to be an undocumented 2000-character floor; a caller paging in 1000-character steps would then re-read overlapping text without any indication, so it was removed.

Field semantics

count means different things in different tools, deliberately:

Tool count Also returned
search_docs number of results in this reply results[]
list_docs number of docs in this page offset, docs[] (no total — use list_spaces)
find_in_doc total passages matched returned, matched_terms, missing_terms

find_in_doc(limit=1) can therefore return count: 24 with one hit — returned tells you what is in the array. matched_terms / missing_terms make partial matches explicit instead of silently ignoring words the page does not contain.

Numeric parameters declare their bounds in the schema: limit 1–25 (search), 1–10 (find_in_doc), 1–300 (list_docs); max_chars 1–120000; offset ≥ 0. An out-of-range value is a validation error, not a silent clamp.

A result whose title carries a 【未发】 / 【暂不对外】 marker is still searchable — whether it is published is the documentation owner's call, and the code does not blacklist by keyword — but the entry carries status_note so a model does not cite unreleased material as settled.

Why find_in_doc exists

13% of the corpus needs pagination and the longest page is 162 000 characters; locating one CAN frame table in that by paging with get_doc costs nine round trips. find_in_doc scores paragraphs and returns their absolute offsets, so a single get_doc(doc_id, offset=…) lands on the table.

Pass the concept as query, not the product name. Terms that already appear in the page title are ignored: search_docs picked the page by them, so repeating them only dilutes the ranking. This is measurable — on the RANGER MINI 3.0 manual, query="RANGER MINI 3.0 CAN 波特率" returned 44 passages with "1.1 产品列表" on top, while query="CAN 波特率" returned 2 with "3.2 CAN接口协议" on top.

Scoring is weighted by corpus-wide document frequency, not raw term count: can appears in 138 pages (weight 1.25) while 波特率 appears in 39 (weight 2.29). If the query contains a distinctive term that the page does not contain, the tool returns zero hits and says so — otherwise English manuals produced 76 meaningless can matches for the query "CAN 波特率". A query made only of generic terms (e.g. just CAN) still returns matches.

Response shape
// search_docs("piper CAN 波特率")
{
  "query": "piper CAN 波特率",
  "count": 3,
  "results": [
    {
      "doc_id": "01a06659-2d4e-7029-bc64-63f9352b34a6",
      "title": "PIPER X 用户手册(CN)",
      "space": "AGX-机械臂产品手册",
      "url": "https://kb.agilex.ai/s/agx-robot-arm-products-cn-en/p/pWVjLJsYc0",
      "score": 18.42,
      "chars": 13264,
      "snippet": "...CAN通信标准采用的是CAN2.0B标准,通讯波特率为1000K..."
    }
  ]
}
// get_doc(doc_id="01a06659-…", max_chars=2000)
{
  "doc_id": "01a06659-2d4e-7029-bc64-63f9352b34a6",
  "title": "PIPER X 用户手册(CN)",
  "url": "https://kb.agilex.ai/s/agx-robot-arm-products-cn-en/p/pWVjLJsYc0",
  "chars": 13264,
  "offset": 0,
  "truncated": true,
  "next_offset": 2000,
  "content": "..."
}
// find_in_doc(doc_id="01a06659-…", query="波特率")
{
  "doc_id": "01a06659-2d4e-7029-bc64-63f9352b34a6",
  "title": "PIPER X 用户手册(CN)",
  "url": "https://kb.agilex.ai/s/agx-robot-arm-products-cn-en/p/pWVjLJsYc0",
  "chars": 13264,
  "query": "波特率",
  "count": 1,
  "hits": [
    {
      "offset": 12101,                // ← feed straight into get_doc
      "heading": "6 机械臂CAN协议",
      "score": 45.85,
      "matched": ["波特", "特率"],
      "excerpt": "…通讯波特率为1000K,报文格式采用MOTOROLA(MSB)格式…"
    }
  ],
  "hint": "用 get_doc(doc_id, offset=hit.offset) 读这一段前后;offset 是全文绝对位置。"
}

url always points at the original page — cite it so the user can verify.


Client configuration

Claude Code
# all projects
claude mcp add --scope user --transport http agilex-docs https://service.agilex.ai/agilex-docs/mcp

# this project only (writes .mcp.json, can be committed)
claude mcp add --scope project --transport http agilex-docs https://service.agilex.ai/agilex-docs/mcp

claude mcp list
Codex CLI
codex mcp add agilex-docs --url https://service.agilex.ai/agilex-docs/mcp

or ~/.codex/config.toml:

[mcp_servers.agilex-docs]
url = "https://service.agilex.ai/agilex-docs/mcp"

Inside Codex, /mcp lists active servers. Codex uses the server's instructions field as global guidance, so the search-then-read workflow is already in place.

Cursor

.cursor/mcp.json in the project, or ~/.cursor/mcp.json globally:

{
  "mcpServers": {
    "agilex-docs": {
      "url": "https://service.agilex.ai/agilex-docs/mcp"
    }
  }
}

Reload the window (Ctrl+Shift+P → Reload Window). Settings → MCP should list agilex-docs with 5 tools.

VS Code / Copilot

.vscode/mcp.json — note the top-level key here is servers, not mcpServers:

{
  "servers": {
    "agilex-docs": {
      "type": "http",
      "url": "https://service.agilex.ai/agilex-docs/mcp"
    }
  }
}

Or Ctrl+Shift+P → MCP: Add Server → HTTP → paste the URL.

Claude Desktop (stdio bridge)

Claude Desktop only speaks stdio, so bridge the endpoint with mcp-remote:

{
  "mcpServers": {
    "agilex-docs": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://service.agilex.ai/agilex-docs/mcp"]
    }
  }
}

Quit and reopen the app completely after saving.

Cherry Studio

Settings → MCP Servers → Add → type streamableHttp, URL as above. Cherry Studio also accepts the mcpServers JSON directly.

DeepSeek Harness (DSH)

DSH connects through @deepseek-ai/dsh-mcp-client, configured as a Cordis overlay:

- insert:
    - id: agilex-docs
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: agilex-docs
        transport: streamable-http
        url: https://service.agilex.ai/agilex-docs/mcp
dsh web --patch "$PWD/examples/agilex-docs.cordis.yml"

Tools appear as mcp__agilex-docs__search_docs.

ChatGPT custom connector

Paid plan, web only: Settings → Connectors → Advanced → enable Developer mode → Create → URL above, authentication No authentication.


Example prompts

I need a CAN control script for the piper arm. First call search_docs with "piper CAN 报文", then get_doc on the best hit, and write the code using the frame format and baud rate from the manual. Cite the manual URL in a comment.

Our ranger mini throws a chassis error code. Search the after-sales FAQ for the code, quote the troubleshooting steps and link the page.

Because the server ships an instructions block telling the model to search first and cite URLs, the workflow usually happens without any extra prompting.


Scope and data

The corpus covers product documentation that is publicly accessible at https://kb.agilex.ai. Internal spaces are excluded: the service reads only publicly shared content and never authenticates, so internal documents cannot be reached through this endpoint.

MCP access therefore does not depend on the visitor login on the knowledge base. Search and reading work anonymously; only the human-facing page url redirects to a visitor login (that gate exists for access logging, not authorization).

When a query names a product (pika 固件升级, ranger CAN 波特率), results are restricted to that product's documents. If the product has not documented the topic, the reply is an empty result set with a hint saying so — it never falls back to another product's manual. Cross-product fallback is the dangerous failure mode here: a user could follow PiPER flashing steps on a PIKA.

Pages with content 263
Of those, ≥500 chars of prose 242 (substantial in /health; a length statistic, not a content check)
Container / empty entries 84 (excluded from search)
Spaces 26
Characters ~3.0 M
Refresh daily 05:20 Asia/Shanghai
Languages Chinese and English

The knowledge base also contains folder pages and placeholder pages with no body text. These are excluded from search results: a folder titled "PIKA固件升级" would otherwise outrank real content for that query and return an empty page. They remain listable through list_docs, and get_doc on one returns empty: true with a hint rather than 0 characters.

New public spaces are added automatically; withdrawn shares are removed on the next refresh.


Rate limits

Scope Limit
Per IP, per minute 60 requests
Per IP, per day 3 000 requests
Over limit HTTP 429 + Retry-After

Higher quota or a dedicated endpoint: contact AgileX (see Feedback).


Limits

  • Read-only. No write tools; nothing here can move a robot.
  • Images are not inlined. Attachment URLs on the source pages are signed with a short TTL, so images render as (图:caption); open the page url to view them.
  • Binary attachments (PDF/XLSX) in public spaces are not parsed — page bodies only.
  • Lexical matching, not semantic. Rephrase if a term misses.
  • One product family per query works best; cross-product questions need multiple searches.

Verify it works

# health
curl -s https://service.agilex.ai/agilex-docs/health | jq

# MCP handshake — the reply is text/event-stream, so strip the "data: " prefix
# before piping to jq (piping SSE straight into jq fails with a parse error)
curl -s -X POST https://service.agilex.ai/agilex-docs/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}' \
  | sed -n 's/^data: //p' | jq '.result.serverInfo'

# full round trip (initialize → tools/list → search → find_in_doc → get_doc)
./scripts/smoke-test.sh

# the Chinese README as plain text (same source as README.zh-CN.md)
curl -s https://service.agilex.ai/agilex-docs/readme.md | head

Repository layout

README.md                    this file
README.zh-CN.md              Chinese version; also served at /agilex-docs/readme.md
server.json                  official MCP Registry manifest
LICENSE                      MIT (documentation + manifest)
docs/CLIENTS.md              per-client setup, long form
examples/                    copy-paste configs per client
scripts/smoke-test.sh        end-to-end check against the live endpoint

Where to find it

Directory Entry Link
ModelScope 魔搭 Chinese listing, Cursor one-click install https://modelscope.cn/mcp/servers/Vicious/agilex-docs
Official MCP Registry ai.agilex.service/docs v1.2.1 https://registry.modelcontextprotocol.io/?q=agilex
Glama TDQS A (4.3/5) https://glama.ai/mcp/connectors/ai.agilex.service/docs
GitHub this repository, MIT https://github.com/wgjsg/agilex-docs-mcp

Search term inside any directory: agilex.

The endpoint is fixed, so no directory listing is required to use it.


Feedback

Missing or wrong document → contact AgileX support through https://www.agilex.ai/ and include the page URL.

Issues about this repository (manifest, docs, client configs) → open an issue here. Issues about document content → the support channel, since the docs live in the internal knowledge base and this repo cannot edit them.


License

MIT — see LICENSE. The license covers the documentation and manifest in this repository. The documentation content served over MCP remains the property of AgileX Robotics.

1# AGILEX Docs MCP
2 
3[![MCP](https://img.shields.io/badge/MCP-streamable--http-blue)](https://modelcontextprotocol.io)
4[![Registry](https://img.shields.io/badge/registry-ai.agilex.service%2Fdocs-green)](https://registry.modelcontextprotocol.io/v0.1/servers?search=agilex)
5[![License](https://img.shields.io/badge/license-MIT-lightgrey)](LICENSE)
6[![Auth](https://img.shields.io/badge/auth-none-brightgreen)](#rate-limits)
7 
8Official product documentation for **AgileX Robotics (松灵机器人)** — user manuals,
9CAN 2.0B protocol references, firmware notes, SDK tech posts and after-sales FAQ for
10`piper`, `pika`, `nero`, `ranger`, `limo`, `scout`, `bunker`, `hunter`, `tracer`,
11`umr`, `cobot_magic` and `aloha`.
12 
13Point your AI coding assistant at this server **before** writing integration code
14for AgileX hardware, so it consults the real manual instead of guessing baud rates,
15frame formats or pinouts.
16 
17> **This repository documents the public interface.** It covers the endpoint,
18> the tool signatures and every client configuration. The indexing service that
19> backs it is operated by AgileX and is not part of this repository.
20 
21---
22 
23## Endpoint
24 
25| | |
26|---|---|
27| **MCP URL** | `https://service.agilex.ai/agilex-docs/mcp` |
28| **Transport** | Streamable HTTP — single endpoint, stateless |
29| **Protocol** | `2025-11-25` (also answers `2025-06-18`, `2025-03-26`, `2024-11-05`) |
30| **Auth** | None. Read-only public docs, rate limited per IP |
31| **Registry** | `ai.agilex.service/docs` |
32| **Docs page** | <https://service.agilex.ai/agilex-docs/> |
33| **Health** | <https://service.agilex.ai/agilex-docs/health> |
34 
35No API key, no OAuth, no local process. If your client speaks Streamable HTTP,
36you only need the URL.
37 
38---
39 
40## Quick start
41 
42Clients are listed in order of how common they are. Pick one.
43 
44| # | Client | Setup |
45|---|---|---|
46| 1 | **Claude Code** | `claude mcp add --scope user --transport http agilex-docs https://service.agilex.ai/agilex-docs/mcp` |
47| 2 | **Codex CLI** | `codex mcp add agilex-docs --url https://service.agilex.ai/agilex-docs/mcp` |
48| 3 | **Cursor** | [one-click install](cursor://anysphere.cursor-deeplink/mcp/install?name=agilex-docs&config=eyJ1cmwiOiJodHRwczovL3NlcnZpY2UuYWdpbGV4LmFpL2FnaWxleC1kb2NzL21jcCJ9), or the JSON below |
49| 4 | **VS Code / Copilot** | `Ctrl+Shift+P` → `MCP: Add Server` → HTTP → paste the URL |
50| 5 | Anything stdio-only | `npx -y mcp-remote https://service.agilex.ai/agilex-docs/mcp` |
51 
52```bash
53# 1) Claude Code — all projects
54claude mcp add --scope user --transport http agilex-docs https://service.agilex.ai/agilex-docs/mcp
55 
56# 2) Codex CLI — writes ~/.codex/config.toml
57codex mcp add agilex-docs --url https://service.agilex.ai/agilex-docs/mcp
58```
59 
60Cursor one-click:
61 
62```
63cursor://anysphere.cursor-deeplink/mcp/install?name=agilex-docs&config=eyJ1cmwiOiJodHRwczovL3NlcnZpY2UuYWdpbGV4LmFpL2FnaWxleC1kb2NzL21jcCJ9
64```
65 
66Any client that reads `mcpServers` (Cursor, Claude Desktop, Cline, Windsurf,
67Cherry Studio, Continue, Zed, LibreChat, Dify …):
68 
69```json
70{
71 "mcpServers": {
72 "agilex-docs": {
73 "url": "https://service.agilex.ai/agilex-docs/mcp"
74 }
75 }
76}
77```
78 
79Full per-client instructions: [docs/CLIENTS.md](docs/CLIENTS.md).
80 
81---
82 
83## Tools
84 
85Five read-only tools. The names are deliberately `verb_noun` so a model can pick
86the right one without reading the schema first.
87 
88| Tool | Purpose | Parameters |
89|---|---|---|
90| `search_docs` | Full-text search. **Start here.** Locate before reading. | `query` (include the product name), `limit` (1–25, default 8), `space` (optional) |
91| `find_in_doc` | Locate a passage inside one long manual; returns absolute `offset` | `doc_id`, `query`, `limit` (1–10, default 5) |
92| `get_doc` | Read one page as Markdown, paginated | `doc_id`, `max_chars` (default 20 000, honoured as requested, max 120 000), `offset` |
93| `list_docs` | Inventory of a single space | `space` (optional), `limit` (1–300, default 100), `offset` (≥0) |
94| `list_spaces` | All public spaces with page counts | — |
95 
96`search_docs` returns `doc_id`, `title`, `space`, `url`, `score`, `chars` and a
97snippet. Then use `find_in_doc` to jump to the passage you need and read it with
98`get_doc(doc_id, offset=…)`. If the response has `truncated: true`, call
99`get_doc` again with `next_offset`.
100 
101Manuals open with a cover page and preface, so reading from offset 0 rarely
102answers a specific question — that is why the search-then-locate-then-read path
103is the recommended one rather than `get_doc` alone.
104 
105`max_chars` is honoured as requested (1–120 000), and the applied value is echoed
106back as `max_chars` in the response. There used to be an undocumented 2000-character
107floor; a caller paging in 1000-character steps would then re-read overlapping text
108without any indication, so it was removed.
109 
110### Field semantics
111 
112`count` means different things in different tools, deliberately:
113 
114| Tool | `count` | Also returned |
115|---|---|---|
116| `search_docs` | number of results in this reply | `results[]` |
117| `list_docs` | number of docs in this page | `offset`, `docs[]` (no total — use `list_spaces`) |
118| `find_in_doc` | **total passages matched** | `returned`, `matched_terms`, `missing_terms` |
119 
120`find_in_doc(limit=1)` can therefore return `count: 24` with one hit — `returned`
121tells you what is in the array. `matched_terms` / `missing_terms` make partial
122matches explicit instead of silently ignoring words the page does not contain.
123 
124Numeric parameters declare their bounds in the schema: `limit` 1–25 (search),
1251–10 (find_in_doc), 1–300 (list_docs); `max_chars` 1–120000; `offset` ≥ 0.
126An out-of-range value is a validation error, not a silent clamp.
127 
128A result whose title carries a `【未发】` / `【暂不对外】` marker is still
129searchable — whether it is published is the documentation owner's call, and the
130code does not blacklist by keyword — but the entry carries `status_note` so a
131model does not cite unreleased material as settled.
132 
133### Why `find_in_doc` exists
134 
13513% of the corpus needs pagination and the longest page is 162 000 characters;
136locating one CAN frame table in that by paging with `get_doc` costs nine round
137trips. `find_in_doc` scores paragraphs and returns their absolute offsets, so a
138single `get_doc(doc_id, offset=…)` lands on the table.
139 
140Pass the *concept* as `query`, not the product name. Terms that already appear in
141the page title are ignored: `search_docs` picked the page by them, so repeating
142them only dilutes the ranking. This is measurable — on the RANGER MINI 3.0 manual,
143`query="RANGER MINI 3.0 CAN 波特率"` returned 44 passages with "1.1 产品列表" on
144top, while `query="CAN 波特率"` returned 2 with "3.2 CAN接口协议" on top.
145 
146Scoring is weighted by corpus-wide document frequency, not raw term count: `can`
147appears in 138 pages (weight 1.25) while `波特率` appears in 39
148(weight 2.29). If the query contains a distinctive term that the page does not
149contain, the tool returns zero hits and says so — otherwise English manuals
150produced 76 meaningless `can` matches for the query "CAN 波特率". A query made
151only of generic terms (e.g. just `CAN`) still returns matches.
152 
153### Response shape
154 
155```jsonc
156// search_docs("piper CAN 波特率")
157{
158 "query": "piper CAN 波特率",
159 "count": 3,
160 "results": [
161 {
162 "doc_id": "01a06659-2d4e-7029-bc64-63f9352b34a6",
163 "title": "PIPER X 用户手册(CN)",
164 "space": "AGX-机械臂产品手册",
165 "url": "https://kb.agilex.ai/s/agx-robot-arm-products-cn-en/p/pWVjLJsYc0",
166 "score": 18.42,
167 "chars": 13264,
168 "snippet": "...CAN通信标准采用的是CAN2.0B标准,通讯波特率为1000K..."
169 }
170 ]
171}
172```
173 
174```jsonc
175// get_doc(doc_id="01a06659-…", max_chars=2000)
176{
177 "doc_id": "01a06659-2d4e-7029-bc64-63f9352b34a6",
178 "title": "PIPER X 用户手册(CN)",
179 "url": "https://kb.agilex.ai/s/agx-robot-arm-products-cn-en/p/pWVjLJsYc0",
180 "chars": 13264,
181 "offset": 0,
182 "truncated": true,
183 "next_offset": 2000,
184 "content": "..."
185}
186```
187 
188```jsonc
189// find_in_doc(doc_id="01a06659-…", query="波特率")
190{
191 "doc_id": "01a06659-2d4e-7029-bc64-63f9352b34a6",
192 "title": "PIPER X 用户手册(CN)",
193 "url": "https://kb.agilex.ai/s/agx-robot-arm-products-cn-en/p/pWVjLJsYc0",
194 "chars": 13264,
195 "query": "波特率",
196 "count": 1,
197 "hits": [
198 {
199 "offset": 12101, // ← feed straight into get_doc
200 "heading": "6 机械臂CAN协议",
201 "score": 45.85,
202 "matched": ["波特", "特率"],
203 "excerpt": "…通讯波特率为1000K,报文格式采用MOTOROLA(MSB)格式…"
204 }
205 ],
206 "hint": "用 get_doc(doc_id, offset=hit.offset) 读这一段前后;offset 是全文绝对位置。"
207}
208```
209 
210`url` always points at the original page — cite it so the user can verify.
211 
212---
213 
214## Client configuration
215 
216<details open>
217<summary><b>Claude Code</b></summary>
218 
219```bash
220# all projects
221claude mcp add --scope user --transport http agilex-docs https://service.agilex.ai/agilex-docs/mcp
222 
223# this project only (writes .mcp.json, can be committed)
224claude mcp add --scope project --transport http agilex-docs https://service.agilex.ai/agilex-docs/mcp
225 
226claude mcp list
227```
228</details>
229 
230<details>
231<summary><b>Codex CLI</b></summary>
232 
233```bash
234codex mcp add agilex-docs --url https://service.agilex.ai/agilex-docs/mcp
235```
236 
237or `~/.codex/config.toml`:
238 
239```toml
240[mcp_servers.agilex-docs]
241url = "https://service.agilex.ai/agilex-docs/mcp"
242```
243 
244Inside Codex, `/mcp` lists active servers. Codex uses the server's `instructions`
245field as global guidance, so the search-then-read workflow is already in place.
246</details>
247 
248<details>
249<summary><b>Cursor</b></summary>
250 
251`.cursor/mcp.json` in the project, or `~/.cursor/mcp.json` globally:
252 
253```json
254{
255 "mcpServers": {
256 "agilex-docs": {
257 "url": "https://service.agilex.ai/agilex-docs/mcp"
258 }
259 }
260}
261```
262 
263Reload the window (`Ctrl+Shift+P` → Reload Window). Settings → MCP should list
264`agilex-docs` with 5 tools.
265</details>
266 
267<details>
268<summary><b>VS Code / Copilot</b></summary>
269 
270`.vscode/mcp.json` — note the top-level key here is `servers`, not `mcpServers`:
271 
272```json
273{
274 "servers": {
275 "agilex-docs": {
276 "type": "http",
277 "url": "https://service.agilex.ai/agilex-docs/mcp"
278 }
279 }
280}
281```
282 
283Or `Ctrl+Shift+P` → **MCP: Add Server** → HTTP → paste the URL.
284</details>
285 
286<details>
287<summary><b>Claude Desktop (stdio bridge)</b></summary>
288 
289Claude Desktop only speaks stdio, so bridge the endpoint with `mcp-remote`:
290 
291```json
292{
293 "mcpServers": {
294 "agilex-docs": {
295 "command": "npx",
296 "args": ["-y", "mcp-remote", "https://service.agilex.ai/agilex-docs/mcp"]
297 }
298 }
299}
300```
301 
302Quit and reopen the app completely after saving.
303</details>
304 
305<details>
306<summary><b>Cherry Studio</b></summary>
307 
308Settings → MCP Servers → Add → type `streamableHttp`, URL as above.
309Cherry Studio also accepts the `mcpServers` JSON directly.
310</details>
311 
312<details>
313<summary><b>DeepSeek Harness (DSH)</b></summary>
314 
315DSH connects through `@deepseek-ai/dsh-mcp-client`, configured as a Cordis overlay:
316 
317```yaml
318- insert:
319 - id: agilex-docs
320 name: '@deepseek-ai/dsh-mcp-client'
321 config:
322 serverName: agilex-docs
323 transport: streamable-http
324 url: https://service.agilex.ai/agilex-docs/mcp
325```
326 
327```bash
328dsh web --patch "$PWD/examples/agilex-docs.cordis.yml"
329```
330 
331Tools appear as `mcp__agilex-docs__search_docs`.
332</details>
333 
334<details>
335<summary><b>ChatGPT custom connector</b></summary>
336 
337Paid plan, web only: Settings → Connectors → Advanced → enable Developer mode →
338Create → URL above, authentication **No authentication**.
339</details>
340 
341---
342 
343## Example prompts
344 
345> I need a CAN control script for the piper arm. First call `search_docs` with
346> "piper CAN 报文", then `get_doc` on the best hit, and write the code using the
347> frame format and baud rate from the manual. Cite the manual URL in a comment.
348 
349> Our ranger mini throws a chassis error code. Search the after-sales FAQ for the
350> code, quote the troubleshooting steps and link the page.
351 
352Because the server ships an `instructions` block telling the model to search first
353and cite URLs, the workflow usually happens without any extra prompting.
354 
355---
356 
357## Scope and data
358 
359The corpus covers product documentation that is publicly accessible at
360<https://kb.agilex.ai>. Internal spaces are excluded: the service reads only
361publicly shared content and never authenticates, so internal documents cannot be
362reached through this endpoint.
363 
364MCP access therefore does not depend on the visitor login on the knowledge base.
365Search and reading work anonymously; only the human-facing page `url` redirects
366to a visitor login (that gate exists for access logging, not authorization).
367 
368When a query names a product (`pika 固件升级`, `ranger CAN 波特率`), results are
369restricted to that product's documents. If the product has not documented the
370topic, the reply is an empty result set with a hint saying so — it never falls
371back to another product's manual. Cross-product fallback is the dangerous
372failure mode here: a user could follow PiPER flashing steps on a PIKA.
373 
374| | |
375|---|---|
376| Pages with content | **263** |
377| Of those, ≥500 chars of prose | 242 (`substantial` in `/health`; a length statistic, not a content check) |
378| Container / empty entries | 84 (excluded from search) |
379| Spaces | **26** |
380| Characters | ~3.0 M |
381| Refresh | daily 05:20 Asia/Shanghai |
382| Languages | Chinese and English |
383 
384The knowledge base also contains **folder pages and placeholder pages with no body
385text**. These are excluded from search results: a folder titled "PIKA固件升级" would
386otherwise outrank real content for that query and return an empty page. They remain
387listable through `list_docs`, and `get_doc` on one returns `empty: true` with a hint
388rather than 0 characters.
389 
390New public spaces are added automatically; withdrawn shares are removed on the
391next refresh.
392 
393---
394 
395## Rate limits
396 
397| Scope | Limit |
398|---|---|
399| Per IP, per minute | 60 requests |
400| Per IP, per day | 3 000 requests |
401| Over limit | HTTP `429` + `Retry-After` |
402 
403Higher quota or a dedicated endpoint: contact AgileX (see [Feedback](#feedback)).
404 
405---
406 
407## Limits
408 
409- **Read-only.** No write tools; nothing here can move a robot.
410- **Images are not inlined.** Attachment URLs on the source pages are signed with a
411 short TTL, so images render as `(图:caption)`; open the page `url` to view them.
412- **Binary attachments** (PDF/XLSX) in public spaces are not parsed — page bodies only.
413- **Lexical matching**, not semantic. Rephrase if a term misses.
414- **One product family per query** works best; cross-product questions need
415 multiple searches.
416 
417---
418 
419## Verify it works
420 
421```bash
422# health
423curl -s https://service.agilex.ai/agilex-docs/health | jq
424 
425# MCP handshake — the reply is text/event-stream, so strip the "data: " prefix
426# before piping to jq (piping SSE straight into jq fails with a parse error)
427curl -s -X POST https://service.agilex.ai/agilex-docs/mcp \
428 -H 'Content-Type: application/json' \
429 -H 'Accept: application/json, text/event-stream' \
430 -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}' \
431 | sed -n 's/^data: //p' | jq '.result.serverInfo'
432 
433# full round trip (initialize → tools/list → search → find_in_doc → get_doc)
434./scripts/smoke-test.sh
435 
436# the Chinese README as plain text (same source as README.zh-CN.md)
437curl -s https://service.agilex.ai/agilex-docs/readme.md | head
438```
439 
440---
441 
442## Repository layout
443 
444```
445README.md this file
446README.zh-CN.md Chinese version; also served at /agilex-docs/readme.md
447server.json official MCP Registry manifest
448LICENSE MIT (documentation + manifest)
449docs/CLIENTS.md per-client setup, long form
450examples/ copy-paste configs per client
451scripts/smoke-test.sh end-to-end check against the live endpoint
452```
453 
454---
455 
456## Where to find it
457 
458| Directory | Entry | Link |
459|---|---|---|
460| **ModelScope 魔搭** | Chinese listing, Cursor one-click install | <https://modelscope.cn/mcp/servers/Vicious/agilex-docs> |
461| **Official MCP Registry** | `ai.agilex.service/docs` v1.2.1 | <https://registry.modelcontextprotocol.io/?q=agilex> |
462| **Glama** | TDQS **A (4.3/5)** | <https://glama.ai/mcp/connectors/ai.agilex.service/docs> |
463| **GitHub** | this repository, MIT | <https://github.com/wgjsg/agilex-docs-mcp> |
464 
465Search term inside any directory: `agilex`.
466 
467The endpoint is fixed, so no directory listing is required to use it.
468 
469---
470 
471## Feedback
472 
473Missing or wrong document → contact AgileX support through
474<https://www.agilex.ai/> and include the page URL.
475 
476Issues about **this repository** (manifest, docs, client configs) → open an issue here.
477Issues about **document content** → the support channel, since the docs live in the
478internal knowledge base and this repo cannot edit them.
479 
480---
481 
482## License
483 
484MIT — see [LICENSE](LICENSE). The license covers the documentation and manifest in
485this repository. The documentation content served over MCP remains the property of
486AgileX Robotics.
487 
View all files on GitHub →

Details

Updated
Nov 4, 2026
License
MIT
Stars on the repo
★ 0
Checked
Source
wgjsg/agilex-docs-mcp ↗
Creator
wgjsg · 1 listing
View creator

Similar MCP servers

See all →
SkillTests in real browsers via Chrome DevTools MCPBrowser testing with devtoolsaddyosmani/agent-skills · by addyosmaniTests in real browsers via Chrome DevTools MCP. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM, capture console errors, analyze network requests, profile performance, or verify visual output with real runtime data. Requires the chrome-devtools MCP server to be configured.★ 98.7k GitHub starsAgentThis MCP server attempts to exercise all the featuresEverything MCP Servermodelcontextprotocol/servers · by modelcontextprotocolThis MCP server attempts to exercise all the features of the MCP protocol. It is not intended to be a useful server, but rather a test…★ 90.5k GitHub starsAgentA Model Context Protocol server that provides web contentFetch MCP Servermodelcontextprotocol/servers · by modelcontextprotocolA Model Context Protocol server that provides web content fetching capabilities. This server enables LLMs to retrieve and process content…★ 90.5k GitHub starsAgentNode.js server implementing Model Context ProtocolFilesystem MCP Servermodelcontextprotocol/servers · by modelcontextprotocolNode.js server implementing Model Context Protocol (MCP) for filesystem operations.★ 90.5k GitHub starsSkillAbout libraries, frameworks, API referencesContext7 MCPupstash/context7 · by upstashThis skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc.★ 62.3k GitHub starsSkillUses Chrome DevTools via MCP for efficient debuggingChromeDevTools/chrome-devtools-mcp · by ChromeDevToolsUses Chrome DevTools via MCP for efficient debugging, troubleshooting and browser automation. Use when debugging web pages, automating browser interactions, analyzing performance, or inspecting network requests. This skill does not apply to `--slim` mode (MCP configuration).★ 52.4k GitHub stars