MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
Trains in China through the 12306 MCP server: routes, dates, options, connections and stops with no screen; booking only on the user's word, in the 12306 app on their phone, stopping before payment.
$ npx skills add nano-muse/nanoMuse --skill train-tickets -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nano-muse/nanoMuse train-tickets --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/nano-muse/nanoMuse.git skills-src && mkdir -p .claude/skills && cp -r skills-src/nanomuse/skills/builtin/train-tickets .claude/skills/train-tickets && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "train-tickets" agent skill from https://github.com/nano-muse/nanoMuse/tree/main/nanomuse/skills/builtin/train-tickets into .claude/skills/train-tickets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-tickets", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/nano-muse/nanoMuse/tree/main/nanomuse/skills/builtin/train-ticketsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add nano-muse/nanoMuse --skill train-tickets -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nano-muse/nanoMuse train-tickets --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nano-muse/nanoMuse.git skills-src && mkdir -p .agents/skills && cp -r skills-src/nanomuse/skills/builtin/train-tickets .agents/skills/train-tickets && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "train-tickets" agent skill from https://github.com/nano-muse/nanoMuse/tree/main/nanomuse/skills/builtin/train-tickets into .agents/skills/train-tickets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-tickets", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nano-muse/nanoMuse --skill train-tickets -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nano-muse/nanoMuse train-tickets --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nano-muse/nanoMuse.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/nanomuse/skills/builtin/train-tickets .cursor/skills/train-tickets && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "train-tickets" agent skill from https://github.com/nano-muse/nanoMuse/tree/main/nanomuse/skills/builtin/train-tickets into .cursor/skills/train-tickets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-tickets", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/nano-muse/nanoMuse.git --path nanomuse/skills/builtin/train-tickets--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add nano-muse/nanoMuse --skill train-tickets -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nano-muse/nanoMuse train-tickets --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nano-muse/nanoMuse.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/nanomuse/skills/builtin/train-tickets .gemini/skills/train-tickets && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "train-tickets" agent skill from https://github.com/nano-muse/nanoMuse/tree/main/nanomuse/skills/builtin/train-tickets into .gemini/skills/train-tickets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-tickets", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install nano-muse/nanoMuse train-ticketsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add nano-muse/nanoMuse --skill train-tickets -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nano-muse/nanoMuse.git skills-src && mkdir -p .github/skills && cp -r skills-src/nanomuse/skills/builtin/train-tickets .github/skills/train-tickets && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "train-tickets" agent skill from https://github.com/nano-muse/nanoMuse/tree/main/nanomuse/skills/builtin/train-tickets into .github/skills/train-tickets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-tickets", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nano-muse/nanoMuse --skill train-tickets -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nano-muse/nanoMuse train-tickets --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nano-muse/nanoMuse.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/nanomuse/skills/builtin/train-tickets .opencode/skills/train-tickets && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "train-tickets" agent skill from https://github.com/nano-muse/nanoMuse/tree/main/nanomuse/skills/builtin/train-tickets into .opencode/skills/train-tickets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-tickets", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
train-ticketsTrains in China through the 12306 MCP server: routes, dates, options, connections and stops with no screen; booking only on the user's word, in the 12306 app on their phone, stopping before payment.
Train Tickets is an agent skill from nano-muse/nanoMuse. Trains in China through the 12306 MCP server: routes, dates, options, connections and stops with no screen; booking only on the user's word, in the 12306 app on their phone, stopping before payment. Use when the user asks about 火车票 / 高铁 / 12306 or a train between two cities.
Its SKILL.md is about 1.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Agent Workflows. It works with Model Context Protocol. The repository describes itself as: nanoMuse: an open-source personal agent for every device you own. One agent with a name and a look of its own that does things, keeps working while the app is closed, remembers… The licence is GPL-3.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 2524aab. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are toml).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Train Tickets loads about 1.4k tokens when it runs. Until then it costs about 72 tokens; SKILL.md has 814 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from nano-muse/nanoMuse at commit 2524aab, republished under its GPL-3.0 licence (© nano-muse). 814 words, ~1,371 tokens.
.claude/skills/train-tickets/SKILL.md (or your agent's skills folder).Two hands, in this order. Searching is done with the 12306__* tools, a community MCP server (12306-mcp) that reads 12306's public timetable and seat counts; no login, no browser, no phone, nothing typed into an app. Booking has no API a personal agent may use; it happens on the phone's screen with phone_task, and only when the user has picked a train and said to book it.
Look for 12306__get-tickets in your tools (the tools list is the only place it can be: no shell command or script to check). If it is not there, say so in one line, give the user the lines to add to config.toml, and, when a phone is connected, offer the search on the phone's screen instead (the old way, below); otherwise stop:
[[mcp.servers]]
name = "12306"
command = "npx"
args = ["-y", "12306-mcp"]
risk = "safe"
egress = trueNode is needed for npx; the phone's own runtime has it.
recall (preferred stations, morning or evening, seat class, who travels) count as answers. Ask for the rest with one ask_user call.12306__get-current-date first whenever the user said 明天 / 后天 / 下周三; the server's date is the one that counts, not yours.12306__get-station-code-of-citys with citys = 北京|上海 gives the code that stands for a whole city (every station in it). A specific station (北京南, 上海虹桥): 12306__get-station-code-by-names. All the stations of a city: 12306__get-stations-code-in-city.12306__get-tickets with date, fromStation, toStation (names or codes), and the filters that fit: trainFilterFlags (G 高铁/城际, D 动车, GD both, Z/T/K the slow ones, F 复兴号), earliestStartTime / latestStartTime (hours, 0–24), sortFlag (startTime, arriveTime, duration), limitedNum (ask for 5–8, not the whole day). One call; a second only if the first came back empty (widen the hours or drop the flag).12306__get-interline-tickets with the same arguments, middleStation optional: the first ten connections. Where a train stops and when: 12306__get-train-route-stations with trainCode and departDate.Then, in your own words, the options that fit, three at most: 车次, 出发站 and time, 到达站 and time, 历时, the seat the user wants with its price and whether there are seats left (剩余 N 张 / 有 / 无). Say which you would take and why (earliest, shortest, cheapest that still has seats). Seat counts move by the minute; say so when the number is small.
Only when the user has picked a train and said to book it, and only with a phone connected (the system prompt says whether one is). Without a phone, say the train, date and price and that the booking is theirs to make in the app; offer a reminder for when sales open or a calendar entry.
phone_task, app = 铁路12306: open the chosen train on the chosen date, pick the seat class and the passengers the user named, and stop on the order confirmation screen; read back the train, date, passengers, seats, total. The goal must say: 停在提交订单页,不要点「提交订单」或任何支付按钮。phone_task for 提交订单; Sentinel will ask the user again for that tap; that is expected, not an error. Payment (支付) is the user's: say the order is placed and waiting to be paid in the app, and stop.Only when the server is not configured and a phone is connected. One phone_task, app = 铁路12306, with a goal like:
在 12306 首页把出发地设为「北京」、目的地设为「上海」、日期设为 9月25日,点「查询车票」。在结果页读出按发车时间最早的前 5 班:车次、发车站和发车时间、到达站和到达时间、历时、二等座价格和余票。只查询,不要点任何车次进入下单。
Rules for the operator you can put in context: the left station is 出发, the right one 到达, the swap icon sits between them; the date is picked on a calendar page; 筛选 / 只看高铁 narrow the list; the results list scrolls. Prices on the list page are the lowest class ("¥xxx 起"); say so.
amap skill) and the train make one plan: leave home at 07:10, G1 at 08:00.trips/<route>-<date>.md in the workspace.remember the stations and times the user keeps choosing, so the next search needs no question.© nano-muse, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in nanomuse/skills/builtin/train-tickets of nano-muse/nanoMuse.
Open the folder on GitHubat commit 2524aab
Train Tickets next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Train Tickets this skillnano-muse/nanoMuse | 608 | — | ~1.4k | Automated safety check: Pass | GPL-3.0 | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 4 repos | ~1.2k | Automated safety check: Pass | MIT | |
| MCP Integration for Pluginsanthropics/claude-plugins-official | 38k | 11 repos | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| MemPalace Memory SearchMemPalace/mempalace | 59k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Crush Configurationcharmbracelet/crush | 29k | — | ~3.7k | Automated safety check: Pass | Custom licence |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
shareAI-lab/learn-claude-code
Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.
anthropics/claude-plugins-official
Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.
MemPalace/mempalace
Mines project files and conversation exports into a local, searchable memory palace and recalls past work by semantic search through the mempalace CLI.
charmbracelet/crush
Explains how to configure the Crush coding agent with crushrc or crush.json, covering providers, models, LSPs, MCP servers, hooks, permissions and config precedence.
mksglu/context-mode
Routes large command, file, API and browser output through context-mode tools so only the needed result enters the agent's context, instead of dumping it via Bash.
nano-muse/nanoMuse
Places, routes, travel times, distances and weather in China through the 高德地图 (Amap) MCP server.
nano-muse/nanoMuse
Where a parcel is, when it will arrive and what a shipment would cost, through the 快递100 MCP server: any Chinese courier (顺丰, 京东, 中通, 圆通, 韵达, 邮政 and more) from a tracking number.
nano-muse/nanoMuse
Compare two to five options (products, plans, places, tools, offers) on the criteria that matter to the user, in a table the user can re-weight, with a recommendation.
nano-muse/nanoMuse
The user's 飞书 / Lark through its command-line tool (lark-cli): agenda, people and groups, reading and sending messages, events, tasks, documents, with no app open.
nano-muse/nanoMuse
Go through recent mail and sort it into needs-a-reply, waiting-on-others, to-do and can-ignore, with draft replies ready for review.
nano-muse/nanoMuse
Prepare for a meeting (who is in it, what was last said with them, what the user owes them and wants from them) as a one-page brief.
Works with
Categories
Trains in China through the 12306 MCP server: routes, dates, options, connections and stops with no screen; booking only on the user's word, in the 12306 app on their phone, stopping before payment. Train Tickets is an agent skill from nano-muse/nanoMuse. Trains in China through the 12306 MCP server: routes, dates, options, connections and stops with no screen; booking only on the user's word, in the 12306 app on their phone, stopping before payment.
Train Tickets fits situations like: the user asks about 火车票 / 高铁 / 12306; A train between two cities.
Run `npx skills add nano-muse/nanoMuse --skill train-tickets -a claude-code`. Or copy the skill folder (nanomuse/skills/builtin/train-tickets in nano-muse/nanoMuse) into .claude/skills/train-tickets in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nano-muse/nanoMuse --skill train-tickets -a codex`. Or copy the skill folder (nanomuse/skills/builtin/train-tickets in nano-muse/nanoMuse) into .agents/skills/train-tickets in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nano-muse/nanoMuse --skill train-tickets -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/train-tickets, .gemini/skills/train-tickets, .github/skills/train-tickets and .opencode/skills/train-tickets in your project.
SKILL.md names no scripts, command-line tools or credentials: Train Tickets is instructions for the agent only.
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Train Tickets is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.4k tokens (SKILL.md is roughly 5.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Train Tickets: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 38k stars) and MemPalace Memory Search (MemPalace/mempalace, 59k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nano-muse (a GitHub organization) maintains it in nano-muse/nanoMuse, which has 608 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on October 10, 2026.
Source: nano-muse/nanoMuse on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.