mcpbeat

Command API Mapping

redis/command-api-mapping

Map Redis commands to their client-library method signatures for the docs API-mapping tables. Use when adding or updating entries in data/command-api-mapping/ — e.g. a new command family (AR*, BF.*) or refreshing a client's signatures. Produces per-command JSON files in the repo's real schema, then merges them.

6k tokens
context cost
the whole folder, loaded on every use
4
files
instructions only
0
copies elsewhere
how many repositories repackaged it
76
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/redis/docs --skill command-api-mapping

What comes with it

17 924 bytes besides the instruction
reference/client-quirks.md
reference/client-source-map.md
reference/output-schema.md

The instruction itself

6 sections, as written by the author

Command → API mapping

Build the data/command-api-mapping/<COMMAND>.json files that drive the per-command

"API methods" tables in the docs. Each file lists, for one Redis command, the equivalent

method signature(s) in each client library.

This is AI-in-the-loop work, not a pure extractor. Reading a client's source file and

turning it into a correct mapping row needs judgment a parser can't supply (public method

name vs. internal function, return type buried in wrappers, descriptions that aren't in the

source at all). You do that judgment; the reference files give you the durable facts.

> Background: an MCP server under build/command_api_mapping/ (underscore) was an earlier,

> heavier attempt at this. It is not wired into the live pipeline and you don't need it.

> The live pipeline is the per-command JSON files + the merge script described below.

When to use

  • Adding a new command family to the mapping (the array AR* commands, a new module).
  • Refreshing one client's signatures after an API change.
  • Filling gaps where a command is missing a client that actually supports it.

The pipeline (how output is consumed)

  • Source of truth: one file per command at data/command-api-mapping/<COMMAND>.json

(e.g. ARSET.json, BF.ADD.json). Filename = command name, including any space

(e.g. ACL CAT.json).

  • Merge: ./build/merge-command-api-mapping.sh concatenates all per-command files into

data/command-api-mapping.json.

  • Overrides: data/command-api-mapping-overrides.json *replaces* (not merges) entries

when the auto-generated data is wrong and you can't fix it at the source.

  • Render: layouts/partials/components/api-methods-tab.html and

layouts/partials/commands-foldout.html read the merged file.

See reference/output-schema.md for the exact JSON shape and the full client-ID list.

Workflow

For each command in the set you're mapping:

  • Identify the target clients. Only include clients that actually ship the command.

For preview/unreleased commands, a client may have it only on master — note that and

decide per task whether to include it. (See reference/client-source-map.md for repos,

IDs, and default branches.)

  • Locate the source file(s). Use the per-client source map in

reference/client-source-map.md. It can be stale for brand-new commands — the map is

a starting point, not gospel. To find where a new command lives, list the client's command

directory via the GitHub contents API (recipe in the source map reference). This is the

step that caught us out on AR*: the array files existed but weren't in any map.

  • Read the source and extract the real signature. Read the file directly. For each

relevant method capture: public method name, parameters (name + type, skipping

context/self/internal params), and return type. Apply the per-client translation rules

in reference/client-quirks.md — these encode the non-obvious bits (e.g. node-redis method

name = camelCase of the filename, return type lives in transformReply, and there are no

doc comments).

  • Write descriptions. Source doc comments are the first choice. Where a client has none

(node-redis, often go-redis), leave description: "" — do not invent prose. The

command's own reference page already carries the human explanation; the table only needs

the signature shape.

  • Write the per-command file at data/command-api-mapping/<COMMAND>.json in the exact

schema (see reference/output-schema.md). Multiple overloads → multiple objects in the

client's array. Omit clients that don't have the command.

  • Merge and verify:
   ./build/merge-command-api-mapping.sh
   python3 -c "import json; json.load(open('data/command-api-mapping.json'))"  # valid JSON

Spot-check one command in the rendered table if you can run the site.

Guardrails

  • Match the live client IDs exactly, including go-redis (hyphen) and node_redis,

redis_py (underscores). Wrong IDs render nothing. Full list in reference/output-schema.md.

  • Don't fabricate signatures or descriptions. If you can't confirm a client has a command,

omit that client rather than guess.

  • Network: fetching client source uses raw.githubusercontent.com / the GitHub API. The

default command sandbox blocks these hosts — run fetches with the sandbox disabled (or use

/sandbox to allow them).

  • Improve this skill as you go. When you hit a new quirk or a stale source path, update the

relevant reference file so the next run is cheaper.

Reference files

  • reference/output-schema.md — exact per-command JSON schema, file locations, merge script,

overrides, client-ID list, consumers.

  • reference/client-source-map.md — per-client repos, default branches, and the known source

file locations for command definitions; recipe for finding new command files.

  • reference/client-quirks.md — per-client translation rules for turning source into a

mapping row (naming, return types, doc-comment availability, internal params to strip).

How to use it

Copy the folder

Take redis/command-api-mapping from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.