Help and Skills
One catalog of Markdown files ships inside the Go binary using go:embed.
There is no runtime filesystem access, download, script execution, or additional
Kite authentication step for reading documentation. The MCP endpoint's existing
OAuth protection still applies. Account data and mutations continue through
ordinary tools and their existing authentication and elicitation checks.
Browse workflows
help({"key":"/"})
/orders
/orders/prepare
/orders/reconcile
/holdings
/holdings/concentration
/holdings/positions
/market-data
/market-data/resolve
/technical-analysis
/technical-analysis/moving-averages
/technical-analysis/rsi
/triggers-and-alerts
/triggers-and-alerts/audit
/daily-review
/daily-review/account-briefing
/troubleshooting
/troubleshooting/authentication
/troubleshooting/data
/troubleshooting/execution
Discovery has three levels: / lists categories, a category lists its direct
children, and a recipe returns full workflow steps. Each child has a short
description and a category or recipe label. Branches show only their summary
and navigation; they do not load descendant instructions. Non-root pages include
a parent key for backtracking. Nested supporting directories automatically gain
navigation pages, without adding synthetic resources to Skills manifests. Omitting key, or using an empty string,
selects /. A single trailing slash is accepted. Keys are limited to 1024 UTF-8 bytes; oversized keys return a tool error before
lookup or recovery. Paths are case-sensitive;
wildcards, URL encoding, path traversal, and host filesystem paths are not
resolved. Invalid input and unknown keys return isError: true with guidance.
Unknown keys include the nearest existing ancestor and its described child keys,
so /orders/unknown offers the valid order recipes immediately.
Recipes explain pagination, stale/missing data, partial fills, and uncertainty.
Technical analysis requires candles and a host computation tool: the server
itself has no indicator engine. Instructions never substitute for transaction
approval. Check tools/list for deployment-specific exclusions before following
a recipe; documentation cannot enable excluded tools.
Negotiation and wire contract
The server declares both resources and the extension in its initialize result:
{"capabilities":{"resources":{},"extensions":{"io.modelcontextprotocol/skills":{}}}}
A client advertising capabilities.extensions["io.modelcontextprotocol/skills"]
as an object in initialize receives the Skills interface instead of help in
tools/list. A stale direct call to help returns a tool error directing that
client to Skills. A client that omits the extension retains help. The choice
is per negotiated session; one client's settings do not affect another client.
An experimental declaration does not activate this behavior.
skills/listreturns a deterministic, complete single page. Omitcursor; an unknown nonempty cursor returns JSON-RPC-32602.skills/get({"uri":"skill://orders/SKILL.md"})returns the same entry as the listing. Unknown URIs, supporting-file URIs, and missing URIs return-32602.- Each entry includes
uri, the complete parsed YAMLfrontmatter, and a completeresourcesmanifest with raw-bytesizeandsha256:<lowercase hex>digests, includingSKILL.mditself. - List/get results include
resultType: "complete",ttlMs: 300000, andcacheScope: "public". These are static documentation, not account data. resources/readreturns the original Markdown bytes as text, e.g.skill://orders/reconcile.md. These resources also appear inresources/listand are readable by generic resource clients. Reading is transport, not skill activation or user approval.- Directory enumeration is optional and is not advertised or implemented.
The server supports 2026-07-28 discovery and multi-round-trip execution,
as well as legacy initialization through 2025-11-25. Skills capability checks
use each request's metadata for the new protocol and initialized session
capabilities for older clients. A client without the Skills extension uses the
ordinary help tool and resource interfaces.
Authoring
mcp/help/
index.md # root help page, not an Agent Skill
orders/
SKILL.md # /orders; skill://orders/SKILL.md
reconcile.md # /orders/reconcile
prepare.md # /orders/prepare
Add a topic directory with SKILL.md, beginning with YAML frontmatter:
---
name: orders
description: Inspect orders, reconcile fills, and prepare explicitly approved order changes.
---
Use Agent Skills naming rules; name must equal the containing directory name.
Keep entry instructions short and link to sibling recipe files with relative
Markdown links. Give recipe files optional YAML description frontmatter for
child-key summaries; without it, the first Markdown heading is used. Skill
branches use their existing frontmatter description. Add nested topic directories with their own SKILL.md when
another level is useful. Parent manifests include all nested files. Use only
Markdown in this catalog. The loader validates root presence, unique keys, and
required frontmatter at startup; manifests and navigation are generated, not
maintained in a second registry. Rebuild the Go binary after editing content. Frontmatter accepts LF and CRLF
line endings; parsing normalizes a copy while resource reads and digests preserve
original file bytes. Frontmatter delimiters must occupy a whole line.
EXCLUDED_TOOLS=help disables the legacy tool through the ordinary tool filter;
it does not disable public workflow resources or the Skills extension.
Run the repository checks:
CGO_ENABLED=0 go test -tags=testing ./...
CGO_ENABLED=1 go test -tags=testing -race ./mcp
Tests cover tree navigation, invalid keys, links, frontmatter, manifests and hashes, native list/get/read round trips, simultaneous legacy/Skills sessions, and an authenticated mock-API order reconciliation workflow over HTTP.
Research references
The implementation follows the Resources-based
Skills extension
and official extension repository,
rather than the superseded skills capability or skill://index.json proposal.
The extension delegates file format to the
Agent Skills specification.
The Go SDK custom-method API
keeps extension requests inside the SDK's normal transport and middleware chain.
Recipe semantics were checked against the repository's schemas and the official
Kite orders and
historical data references.