Agent skill

Expose Tools On MCP

by speakeasy-api in speakeasy-api/gram

Put a newly published tool in front of people by adding it to one exact MCP server in an explicit AICP project, creating a new server from the project's function tools when none fits, or take a tool…

AGPL-3.0Auto-check passedAgent Workflows

Install Expose Tools On MCP

skills CLI
$ npx skills add speakeasy-api/gram --skill expose-tools-on-mcp -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install speakeasy-api/gram expose-tools-on-mcp --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .claude/skills && cp -r skills-src/server/internal/plugins/platform_mcp_skills/expose-tools-on-mcp .claude/skills/expose-tools-on-mcp && rm -rf skills-src

Use ~/.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/

Facts

Skill name
expose-tools-on-mcp
GitHub stars
273
Token cost
~4.1k tokens
SKILL.md length
2,617 words
Files
1
Skills in repo
39
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Put a newly published tool in front of people by adding it to one exact MCP server in an explicit AICP project, creating a new server from the project's function tools when none fits, or take a tool…

  • Works in 11 steps: Call list_projects with limit: 100 to… → Call list_project_tools for that exact… → Call find_mcp for that exact project… → …
  • Tasks that involve MCP servers
  • SKILL.md covers Safety rules and Workflow
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Expose Tools On MCP is an agent skill from speakeasy-api/gram. Put a newly published tool in front of people by adding it to one exact MCP server in an explicit AICP project, creating a new server from the project's function tools when none fits, or take a tool back off, with confirmed and version-protected changes through the Speakeasy AI Control Plane Platform MCP.

Its SKILL.md is about 4.1k 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, covering MCP servers. It works with Model Context Protocol. The repository describes itself as: Securely scale AI usage across your organization. A single stack to Connect, Secure, Observe and Distribute agents, MCPs, and Skills within your company. The licence is AGPL-3.0.

When your agent uses it

  • Tasks that involve MCP servers

Example prompts

  • “/expose-tools-on-mcp”

Workflow steps

11 steps, taken from the first numbered list in SKILL.md.

  1. Call list_projects with limit: 100 to confirm the Platform MCP is authenticated and obtain the eligible projects. If authenticated…
  2. Call list_project_tools for that exact project. Use query to narrow by tool name or by the function or API document that produced it, and…
  3. Call find_mcp for that exact project with limit: 100, following every next_cursor with cursor and no query until the list is complete. Ask…
  4. Call get_mcp with that project ID and that exact mcp_id. Read its tool_exposure. If tool_exposure is absent, this server's tools are not…
  5. Present the exact change and its reach before asking for confirmation: the project, the server, each tool by name and identifier, and…
  6. After explicit confirmation, call add_tools_to_mcp — or remove_tools_from_mcp for a removal — with the exact project ID, the exact mcp_id…
  7. Read the result before reporting anything. outcome: applied with an empty unchanged means every named tool moved. outcome: applied with a…
  8. A refusal naming tools means nothing was changed at all, not that part of the request landed. Present the named tools, explain that they…
  9. Report any removed_plugin_ids as plugins whose automatic membership this edit removed; distributions lists the remaining memberships…
  10. Check index_signal on every applied change, and say something when it is neither requested nor not_required. A server set to dynamic tool…
  11. Removal is the counterpart of the same design and follows exactly the same steps, with the same boundary as step 8, except that its…

What it can do on your machine

Read from SKILL.md and the folder at commit 1378037. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Expose Tools On MCP loads about 4.1k tokens when it runs. Until then it costs about 82 tokens; SKILL.md has 2,617 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~82
When it runs · the whole SKILL.md, loaded when a task matches
~4.1k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from speakeasy-api/gram at commit 1378037, republished under its AGPL-3.0 licence (© speakeasy-api). 2,617 words, ~4,057 tokens.

Download SKILL.mdSave it as .claude/skills/expose-tools-on-mcp/SKILL.md (or your agent's skills folder).
name
expose-tools-on-mcp
description
Put a newly published tool in front of people by adding it to one exact MCP server in an explicit AICP project, creating a new server from the project's function tools when none fits, or take a tool back off, with confirmed and version-protected changes through the Speakeasy AI Control Plane Platform MCP.

Put a tool on an MCP server

Use this workflow only through the authenticated Speakeasy AI Control Plane (AICP) Platform MCP connected as an external administrator. Publishing a tool to a project regenerates what the project can offer; it does not put that tool in front of anybody. Which tools one MCP server exposes is a separate, deliberate decision, and this workflow is how an administrator makes it: read the project's tools, read what the server exposes today, then add or remove named tools against the exact list that was read. When the project has no server that fits, the same workflow can create one whose tools are tools the project's functions already produce.

This is not the same as adding a server to a plugin. A plugin decides which servers people receive; this decides which tools one of those servers offers. For putting a whole server in front of people, use add-mcp-from-catalog, add-mcp-from-remote-url, or the plugin workflows instead.

It is not available to managed project assistants: the change reaches everyone holding an affected plugin the moment it commits, so it stays on the surface an administrator drives directly. Installing this package grants no organization or project access.

Safety rules

  • Only a server whose tools come from this project can be changed here. A server that fronts an upstream offers whatever that upstream offers, and a server set up before AICP tracked servers separately has no record to change; both refuse with a message pointing to the AICP dashboard. Report that refusal and stop rather than looking for another route.
  • Keep the project, the MCP server, and every tool explicit. Never infer any of them from prior context, a display name, or the Default project, and never substitute a similar-looking tool.
  • Never guess a tool identifier. Use an exact identifier a tool returned: for an addition, the one from the project's tool list; for a removal, that or the one from the server's own tool_exposure.tool_urns. Never type one out from a display name or from memory.
  • The project's tool list governs additions only. A tool missing from it cannot be added, most often because the deployment that produces it has not finished; say so rather than adding something else. A removal is not bound by it: a tool the project has stopped producing can still be sitting on the server, and taking that orphaned entry off is exactly what a removal is for.
  • State the blast radius before acting. Changing a server's tool list republishes every plugin that carries that server, and everyone holding one of those plugins receives the change immediately. Removing a tool takes it away from those same people, including anyone in the middle of using it.
  • Every change carries the exposure version from the read it was based on, a fresh idempotency key, and confirmed: true only after the user has confirmed the exact server and the exact tools. Never send confirmed: true on the user's behalf.
  • Never retry a mutation on your own initiative. Every conflict, denial and refusal goes back to the user: report what happened and what it means, and act again only when they ask. Never retry against a different server, and never widen the tool list to make a call succeed. What changes between outcomes is what you take back to them — a fresh read for a conflict, a wait for a rate limit, a dead end for a structural refusal — never whether they are involved.
  • A refusal saying the tool list is shared beyond what this change can reach is final, not a race. It means the same set of tools is offered by more MCP servers than can be changed from here, or by a server outside the chosen project, so re-reading and repeating reaches the same answer every time. Report it, send the user to the AICP dashboard, and stop; never loop back to a fresh read on it.
  • Nothing is dropped silently. A tool this project does not produce and the server does not already expose refuses the whole request by name and changes nothing. A tool already in the state the user asked for is reported as unchanged, not as a change.
  • Secrets never enter chat. This workflow needs none; never ask for or accept credentials, tokens, headers, or authorization values, and never present a link a tool did not return.
  • Use send_platform_mcp_feedback only after asking for consent, and never include identifiers, URLs, credentials, payloads, or logs.

Workflow

  1. Call list_projects with limit: 100 to confirm the Platform MCP is authenticated and obtain the eligible projects. If authenticated discovery is unavailable, stop and ask the user to complete or repair AICP OAuth. If truncated: true, report that project discovery is incomplete and hand off to the AICP dashboard. Ask the user to choose one exact project.

  2. Call list_project_tools for that exact project. Use query to narrow by tool name or by the function or API document that produced it, and follow every next_cursor with cursor and the same filters until the list is complete. Each entry names the tool, its exact identifier, and the source it came from, so the user can tell two similarly named tools apart. If a tool the user wants added is absent, report that the project's latest completed deployment does not produce it yet and stop; publishing again and waiting for that deployment to finish is the fix, not a different tool. For a removal, do not stop here: a tool the project no longer produces can still be on the server, so carry on through step 3 — the user still has to choose the exact server — and then take the exact identifier from that server's own tool_exposure.tool_urns in step 4.

  3. Call find_mcp for that exact project with limit: 100, following every next_cursor with cursor and no query until the list is complete. Ask the user to choose one exact MCP server. Do not choose for them and do not assume there is only one. If the project has no server, or the user says none of them fits, offer to create one instead and follow the next paragraph; never create a server the user did not ask for.

    Creating a server. This is for an addition only, and only from tools a function produced: every tool must come from list_project_tools with source_kind function. A tool generated from an API document cannot be used here; say so and point the user at the AICP dashboard. Ask the user for the new server's name. First call create_mcp_from_functions with the exact project ID, the name, the exact tool identifiers, one new idempotency key for this creation, and without confirmed: true; it creates and records nothing and answers confirmation_required with a preview. Never work out or describe a slug yourself. Show the user the preview values as returned before asking for confirmation: toolset_slug is exact, and mcp_slug_prefix is only the start of the server's address, because a short suffix is added at creation — say that, and never present the prefix as the full address. When preview.would_join_default_plugin is true, this would be the organization's first server: say plainly that it joins the project's Default plugin on creation, so everyone holding that plugin receives it. Present the exact project, the name, the preview, who will receive the server, and each tool by name and identifier, and ask for explicit confirmation. After they confirm, call create_mcp_from_functions again with the same project, name and tools, the same idempotency key the preview used, and confirmed: true. Use a new key only when starting a new attempt after a refusal. A refusal naming tools means nothing was created: those tools are not produced by the project's latest completed deployment, so return to step 2 rather than creating a server without them. A refusal saying the name is taken means nothing was created: ask the user for another name. On success, report the full mcp_slug the result returns and the returned exposure (a fresh read, not the list that was asked for), and read index_signal exactly as step 10 describes. Then say who receives the server from the result, never from the preview: when added_to_default_plugin is true, tell the user it joined the project's Default plugin and everyone holding that plugin receives it. publication_requested means a refresh of their plugin was requested, not confirmed delivered: never tell the user people already have the server. When added_to_default_plugin is false, say plainly that the new server reaches nobody until it is put into a plugin, and offer the plugin workflow as the next step. Skip steps 4 to 8 for a server you just created; it already exposes exactly the confirmed tools.

  4. Call get_mcp with that project ID and that exact mcp_id. Read its tool_exposure. If tool_exposure is absent, this server's tools are not this project's to change: say so, point the user at the AICP dashboard, and stop. Otherwise present the tools it exposes today next to the tools the user wants added or removed, and say explicitly which of them are already in the requested state. When tool_exposure.next_tool_cursor is present, the list is only part of what the server exposes: call get_mcp again with the same project and server and tool_cursor set to it, and repeat until it is absent. Present the server's tools only once that read is complete. Keep tool_exposure.exposure_version from the page that completed the read internally; it describes the whole list and is the read this change will be checked against. A partial page carries no exposure version, so a change can never be confirmed against a list only partly read. A conflict while paging means the list changed mid-read: start again from the first page. When tool_exposure.truncated is true but no next_tool_cursor came back, the rest of the list cannot be read from this connection: say that the list shown is partial and that no change can be confirmed against it, stop before requesting confirmation or calling a mutation, and hand off to the AICP dashboard. Do not infer platform-tool absence, automatic-membership changes, or restored eligibility from a partial list.

  5. Present the exact change and its reach before asking for confirmation: the project, the server, each tool by name and identifier, and every plugin listed in the server's distributions. State that the change requests republication of affected plugins: supported clients receive updates on their normal refresh cycle, while locally installed ZIPs require replacement. For removals, warn that people holding the listed plugins lose the removed tools when the change reaches them. Check the server’s current tool list as well as the requested edit: if the edited toolset still contains any platform tool, the entire toolset is excluded from automatic distribution and proven automatic role-plugin memberships are removed, even when the edit only adds ordinary tools. Explicit manual memberships and MCP access are preserved. Removing the last platform tool restores eligibility for automatic distribution while preserving prior removal history; do not promise previously removed memberships will be reattached. When tool_exposure.shared_with_other_servers is above zero, say how many other MCP servers offer this same set of tools and that the change moves all of them together; the change is allowed only with permission to change every one, and is refused outright otherwise. The count covers only servers in the chosen project, so a change can still be refused as shared beyond this workflow's reach even when it reads zero. Ask for explicit confirmation of that exact list.

  6. After explicit confirmation, call add_tools_to_mcp — or remove_tools_from_mcp for a removal — with the exact project ID, the exact mcp_id, the exact tool identifiers, the exposure_version from the step-4 read, a fresh idempotency key, and confirmed: true. Send the identifiers exactly as they were returned — character for character from list_project_tools for an addition, or from the server's tool_exposure.tool_urns for a removal.

  7. Read the result before reporting anything. outcome: applied with an empty unchanged means every named tool moved. outcome: applied with a non-empty unchanged is a partial result: name which tools moved and which were already in the requested state. outcome: no_op means nothing needed changing, so do not announce a change or a republish. exposure is a fresh read taken after the change committed; report that list, not the one that was asked for. When it carries next_tool_cursor, it is only the first page: read the rest through get_mcp with tool_cursor before reporting the full list. When snapshot_scope is not fresh_read_after_commit, the change committed but could not be read back: say that rather than claiming the final state.

  8. A refusal naming tools means nothing was changed at all, not that part of the request landed. Present the named tools, explain that they are neither produced by this project nor already on the server, and return to step 2. A conflict means the server's tool list changed between the read and the write, so the change was refused to avoid overwriting somebody else's edit: return to step 4, present the list as it stands now, and ask the user to confirm again against it. Never reuse the old exposure version, and never retry with the same idempotency key and different tools. A refusal saying the tool list is shared beyond what this change can reach is the one refusal that does not return to a fresh read: it is about how the servers are set up, not about a race, so report it, point the user at the AICP dashboard, and stop. A rate-limit refusal is neither a race nor a dead end: nothing was changed and the same call will work later, so say that it was throttled and that the change has not been made, and repeat it unchanged only when the user asks you to — never on a timer of your own.

  9. Report any removed_plugin_ids as plugins whose automatic membership this edit removed; distributions lists the remaining memberships. Report the publication outcome separately from the change. publication_request and publish_signal describe whether a package refresh was requested, not that plugins or the people holding them have converged. Verify with a fresh get_mcp if the user needs the settled state, and never claim people already have the tool unless the returned live state supports that.

  10. Check index_signal on every applied change, and say something when it is neither requested nor not_required. A server set to dynamic tool selection cannot list any tools at all while its current tool list has no search index, so unavailable or request_failed means the change landed but that server may answer nothing for a few minutes until the platform rebuilds the index on its own. Tell the user plainly, say it is expected to recover without action, and point them at the AICP dashboard if it does not. Never present this as the change having failed — it did not — and never retry the mutation because of it.

  11. Removal is the counterpart of the same design and follows exactly the same steps, with the same boundary as step 8, except that its identifiers may come from the server's exposed list rather than the project's. A name that is neither produced by this project's latest deployment nor already on this MCP server is refused by name, so a mistyped identifier is never mistaken for "already gone". A tool the project does produce but the server does not expose is not refused: it comes back as unchanged, because there was nothing to remove. Report that as "it was not on the server", never as a refusal. A tool the project no longer produces can still be removed, because the server is still offering it — so a removal never waits on a deployment, and never asks the user to publish a tool again in order to take it away.

© speakeasy-api, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in server/internal/plugins/platform_mcp_skills/expose-tools-on-mcp of speakeasy-api/gram.

Open the folder on GitHubat commit 1378037

Compare with similar skills

Expose Tools On MCP 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.

Expose Tools On MCP compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Expose Tools On MCP this skillspeakeasy-api/gram273—~4.1kAutomated safety check: PassAGPL-3.0
MCP Server Builderanthropics/skills180k63 repos~2.3kAutomated safety check: PassApache-2.0
MCP Server BuildershareAI-lab/learn-claude-code78k5 repos~1.2kAutomated safety check: PassMIT
MCP Integration for Pluginsanthropics/claude-plugins-official38k11 repos~3.1kAutomated safety check: PassApache-2.0
Crush Configurationcharmbracelet/crush29k—~3.7kAutomated safety check: PassCustom licence
Context Mode Output Sandboxmksglu/context-mode26k—~4.1kAutomated safety check: PassCustom licence

Similar skills

  • MCP Server Builder

    anthropics/skills

    Official

    Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.

    180k GitHub starsUsed in 63 repos~2.3k tokens
    Agent WorkflowsAuto-check passed
  • MCP Server Builder

    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.

    78k GitHub starsUsed in 5 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • MCP Integration for Plugins

    anthropics/claude-plugins-official

    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.

    38k GitHub starsUsed in 11 repos~3.1k tokens
    Agent WorkflowsAuto-check passed
  • Crush Configuration

    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.

    29k GitHub stars~3.7k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Context Mode Output Sandbox

    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.

    26k GitHub stars~4.1k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Migrates the compatible subset of settings and global file-based MCP servers from the Warp desktop app into Warp Agent CLI without exposing credentials or state.

    65k GitHub starsUsed in 1 repo~2.1k tokens
    Agent WorkflowsAuto-check passed

More from speakeasy-api/gram

All 39 skills in this repo
  • Gram Playwright CLI

    speakeasy-api/gram

    A skill your agent uses when automating the Speakeasy dashboard in a browser, capturing screenshots, inspecting pages.

    273 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Transactional Email

    speakeasy-api/gram

    A skill your agent uses when adding, changing, restyling, reviewing, validating, or previewing a Speakeasy transactional email, in Go or in LMX/MJML — a template<name.go, a TemplateKey constant, a…

    273 GitHub stars~4.7k tokensUpdated today
    Auto-check passed
  • Admin Shadcn

    speakeasy-api/gram

    A skill your agent uses when adding, changing, or styling UI in client/admin (the Speakeasy admin dashboard) that touches shadcn/ui — a button, dialog, table, sidebar, badge, select, tabs, tooltip…

    273 GitHub stars~1k tokensUpdated today
    Auto-check passed
  • A skill your agent uses when adding, editing, reviewing, testing, or locating a reviewed skill distributed with the Platform MCP plugin; triggers include "Platform MCP skill", "platformmcpskills"…

    273 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Clickhouse

    speakeasy-api/gram

    A skill your agent uses when changing or reviewing Speakeasy ClickHouse schemas, migrations, queries, inserts, access principals, bootstrap SQL, Cloud compatibility, partial migration failures, or…

    273 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • Feature Flag

    speakeasy-api/gram

    A skill your agent uses when gating a feature behind a flag, dogfooding or gradually rolling out a change, choosing between productfeatures and PostHog feature flags, adding or checking a product…

    273 GitHub stars~2.6k tokensUpdated today
    Auto-check passed

Categories

Questions about Expose Tools On MCP

What does Expose Tools On MCP do?

Put a newly published tool in front of people by adding it to one exact MCP server in an explicit AICP project, creating a new server from the project's function tools when none fits, or take a tool…. Expose Tools On MCP is an agent skill from speakeasy-api/gram. Put a newly published tool in front of people by adding it to one exact MCP server in an explicit AICP project, creating a new server from the project's function tools when none fits, or take a tool back off, with confirmed and version-protected changes through the Speakeasy AI Control Plane Platform MCP.

When should I use Expose Tools On MCP?

Expose Tools On MCP fits situations like: tasks that involve MCP servers.

How do I install Expose Tools On MCP in Claude Code?

Run `npx skills add speakeasy-api/gram --skill expose-tools-on-mcp -a claude-code`. Or copy the skill folder (server/internal/plugins/platform_mcp_skills/expose-tools-on-mcp in speakeasy-api/gram) into .claude/skills/expose-tools-on-mcp in your project. Claude Code loads it when a task matches its description.

How do I install Expose Tools On MCP in Codex?

Run `npx skills add speakeasy-api/gram --skill expose-tools-on-mcp -a codex`. Or copy the skill folder (server/internal/plugins/platform_mcp_skills/expose-tools-on-mcp in speakeasy-api/gram) into .agents/skills/expose-tools-on-mcp in your project. Codex loads it when a task matches its description.

Can I use Expose Tools On MCP in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add speakeasy-api/gram --skill expose-tools-on-mcp -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/expose-tools-on-mcp, .gemini/skills/expose-tools-on-mcp, .github/skills/expose-tools-on-mcp and .opencode/skills/expose-tools-on-mcp in your project.

What does Expose Tools On MCP need to run?

SKILL.md names no scripts, command-line tools or credentials: Expose Tools On MCP is instructions for the agent only.

Does Expose Tools On MCP access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Expose Tools On MCP safe to install?

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.

What licence does Expose Tools On MCP use?

Expose Tools On MCP is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Expose Tools On MCP use?

About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Expose Tools On MCP?

Skills that share tags, products or a category with Expose Tools On MCP: 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 Crush Configuration (charmbracelet/crush, 29k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Expose Tools On MCP?

speakeasy-api (a GitHub organization) maintains it in speakeasy-api/gram, which has 273 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 9, 2026.

Source: speakeasy-api/gram on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.