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.
Redeploy one Platform-managed MCP server from an explicit source AICP project to an explicit target project in the same organization, complete secure setup there, verify readiness, distribute it…
$ npx skills add speakeasy-api/gram --skill migrate-mcp-between-projects -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install speakeasy-api/gram migrate-mcp-between-projects --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/speakeasy-api/gram.git skills-src && mkdir -p .claude/skills && cp -r skills-src/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects .claude/skills/migrate-mcp-between-projects && 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 "migrate-mcp-between-projects" agent skill from https://github.com/speakeasy-api/gram/tree/main/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects into .claude/skills/migrate-mcp-between-projects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-mcp-between-projects", 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/speakeasy-api/gram/tree/main/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projectsType 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 speakeasy-api/gram --skill migrate-mcp-between-projects -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install speakeasy-api/gram migrate-mcp-between-projects --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .agents/skills && cp -r skills-src/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects .agents/skills/migrate-mcp-between-projects && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migrate-mcp-between-projects" agent skill from https://github.com/speakeasy-api/gram/tree/main/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects into .agents/skills/migrate-mcp-between-projects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-mcp-between-projects", 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 speakeasy-api/gram --skill migrate-mcp-between-projects -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install speakeasy-api/gram migrate-mcp-between-projects --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects .cursor/skills/migrate-mcp-between-projects && 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 "migrate-mcp-between-projects" agent skill from https://github.com/speakeasy-api/gram/tree/main/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects into .cursor/skills/migrate-mcp-between-projects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-mcp-between-projects", 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/speakeasy-api/gram.git --path server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects--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 speakeasy-api/gram --skill migrate-mcp-between-projects -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install speakeasy-api/gram migrate-mcp-between-projects --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects .gemini/skills/migrate-mcp-between-projects && 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 "migrate-mcp-between-projects" agent skill from https://github.com/speakeasy-api/gram/tree/main/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects into .gemini/skills/migrate-mcp-between-projects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-mcp-between-projects", 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 speakeasy-api/gram migrate-mcp-between-projectsInstalls 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 speakeasy-api/gram --skill migrate-mcp-between-projects -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .github/skills && cp -r skills-src/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects .github/skills/migrate-mcp-between-projects && 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 "migrate-mcp-between-projects" agent skill from https://github.com/speakeasy-api/gram/tree/main/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects into .github/skills/migrate-mcp-between-projects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-mcp-between-projects", 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 speakeasy-api/gram --skill migrate-mcp-between-projects -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install speakeasy-api/gram migrate-mcp-between-projects --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects .opencode/skills/migrate-mcp-between-projects && 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 "migrate-mcp-between-projects" agent skill from https://github.com/speakeasy-api/gram/tree/main/server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects into .opencode/skills/migrate-mcp-between-projects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-mcp-between-projects", 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.
migrate-mcp-between-projectsRedeploy one Platform-managed MCP server from an explicit source AICP project to an explicit target project in the same organization, complete secure setup there, verify readiness, distribute it…
Migrate MCP Between Projects is an agent skill from speakeasy-api/gram. Redeploy one Platform-managed MCP server from an explicit source AICP project to an explicit target project in the same organization, complete secure setup there, verify readiness, distribute it, and optionally retire the source with a safe cutover through the Speakeasy AI Control Plane Platform MCP.
Its SKILL.md is about 4.3k 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.
12 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ad78247. 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.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Migrate MCP Between Projects loads about 4.3k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 2,423 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 speakeasy-api/gram at commit ad78247, republished under its AGPL-3.0 licence (© speakeasy-api). 2,423 words, ~4,294 tokens.
.claude/skills/migrate-mcp-between-projects/SKILL.md (or your agent's skills folder).Use this workflow only through the authenticated Speakeasy AI Control Plane (AICP) Platform MCP connected as an external administrator. There is no move tool, so it follows the same guarded outcome a user would complete manually in the AICP dashboard: read the source registration, re-add the same reviewed source in an explicit target project, finish secure setup there, verify readiness, distribute to one exact target plugin, and only then optionally disable the source. The source stays enabled and untouched until the target is registered, connected, verified ready, and distributed. For a first-time addition with no source, use add-mcp-from-catalog or add-mcp-from-remote-url instead. It is not available to managed project assistants: an assistant acts only inside its own project and cannot name a second one, and the plugin inventory, access reads, forced readiness probes, and distribution this workflow depends on are external-client tools. Installing this package grants no organization or project access.
send_platform_mcp_feedback only after asking for consent, and never include identifiers, URLs, credentials, payloads, headers, logs, or attachments.list_projects with limit: 100 to verify that 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. Present the projects and ask the user to choose one exact source project and one exact, different target project in this organization; keep each project's ID and slug paired internally.find_mcp for only the source project with limit: 100, following every next_cursor using cursor with the same project and no query until the list is complete. Present only entries with model: platform_managed; a dashboard-managed, hosted, tunnelled, or legacy server cannot be migrated with these tools, so report that and stop. Ask the user to choose one exact source MCP.get_mcp with the source project ID and that exact mcp_id. Continue only when it returns a registration ID, registration.status: registered, registration.components_complete: true, visibility: private, and effective_enabled: true. A disabled source was deliberately turned off, and a public source cannot be retired with these tools; in either case stop and report that state rather than re-creating it, because the target is always registered private and enabled regardless of the source. Retain its name, slug, visibility, source.kind, source.provider, source.reference, distributions, and registration ID internally as the source shape.get_mcp_access for the source and retain its stored tool names and the roles that reach it for later comparison.get_mcp_client_admission with the source project slug and registration ID and retain the returned mode and custom client ID metadata URLs. If it answers invalid_request, the admission setting cannot be read by this caller, most often because another administrator registered the source: mark admission as unreadable and skip every source-scoped probe and lifecycle step.list_plugins for the source project ID, following every next_cursor until the list is complete, then get_plugin for each plugin, matching servers[].mcp_slug against the source slug, because distributions lists only Platform-flow memberships. Record each carrying plugin's name, policy, and assignment set; these memberships are project-scoped and are not copied.source.kind:reviewed_catalogue, call inspect_mcp_candidate with provider_key set to source.provider and catalog_ref set to source.reference. Present the declared configuration fields and collect only the non-secret values from the user; stored source values are not readable and must be supplied again.user_supplied_url, call inspect_mcp_candidate with remote_url set to source.reference and no catalogue selectors, and present the canonical URL and the source name for confirmation.
If the entry no longer exists or inspection reports an error, stop without registering. Compare the returned tool names with the source access read and report differences as evidence rather than failure.reviewed_catalogue call register_catalog_mcp with the exact target project slug, provider_key, catalog_ref, non_secret_config, and a fresh idempotency key; for user_supplied_url call register_remote_mcp with the exact target project slug, remote_url, the source name as display_name, and a fresh idempotency key. Registration is private and does not distribute the MCP. Read next_action: ready and start_setup continue to the readiness check; continue_dashboard_setup and secure_dashboard_setup_required return a dashboard_setup_url to present as-is in step 11. An ineligible_project refusal means the target project cannot receive it; a feature_unavailable refusal means registration is unavailable right now; a plain conflict means the idempotency key was already used with different input. In every case report the refusal and stop; do not retry against another project or with altered input.find_mcp for the target project and select only the entry whose registration.id equals the returned registration ID, then call get_mcp with the target project ID and that mcp_id to obtain its version, source.provider, and source.reference. If the target name differs from the source name and the user wants it kept, call update_mcp_metadata with the target project slug, registration ID, mcp_id, the source name, the immediately preceding version as expected_version, and a fresh idempotency key.get_mcp_readiness with the target project slug and registration ID to inspect persisted readiness. Registration writes no readiness, so a freshly registered MCP reports readiness_unavailable; that is not a reason to stop. Call get_mcp_readiness once with force: true to obtain provider evidence, then route secure setup from the exact target evidence:upstream_identity_provider_not_configured, explain that AICP can attach the one identity provider discovered from the persisted source. Ask for explicit confirmation, then call attach_platform_mcp_identity_provider with confirmed: true, present its exact authorization_url as a clickable link, and wait for the user to use Connect or Authorize.upstream_authorization_required, call attach_platform_mcp_identity_provider again with confirmed: true to retrieve the current server-issued authorization_url and wait for Connect or Authorize.continue_dashboard_setup or secure_dashboard_setup_required registration result or required_header_missing evidence, present the exact dashboard_setup_url. If none was returned, call get_setup_handoff with the target project slug, registration ID, and the target's source.provider as provider_key and source.reference as catalog_ref exactly as the step-10 get_mcp returned them (for a remote URL these are the platform's direct-remote provider key and the canonical URL), never values retyped from the source project or supplied by the user, and present only its exact setup_url. The user re-enters every secret there, never in chat; never request the resulting value.get_mcp_readiness with force: true again from the same connection. Do not rely on stale or inferred readiness. If the state is still not ready, return to the routing in step 11 with the new evidence and repeat until it is ready or the user stops. Forced probes are limited to three per minute for one registration, so never loop them to wait out a handoff. A rate_limited refusal means that budget is spent: call get_mcp_readiness without force to read the last stored check, which is already fresh from the prior probe, and force again only after a minute has passed.get_mcp_client_admission with the target project slug and registration ID and present the target's current mode next to the source mode. If the source mode was readable, differs from the target's, and appears in the target's allowed_modes, explain what it admits and refuses, ask for explicit confirmation, then call set_mcp_client_admission with that exact mode and confirmed: true. A source mode absent from allowed_modes cannot be written: report it and leave the target's mode unchanged. Known clients (presets) refuses an unlisted client at authorization with no fallback, so confirm the user accepts that before selecting it. Custom client ID metadata URLs are re-added only in the AICP dashboard.list_plugins for the target project ID, following every next_cursor until the list is complete, present its plugins alongside the source carrying plugins by name, and ask the user which one exact target plugin should carry this MCP. Do not choose for them and do not assume the default plugin. If none fits, such as when the source plugin has no counterpart in the target project, offer to create one: agree its name, choose one idempotency key for this create, and call create_plugin for the target project ID with that key and confirmed: false. Nothing is created and no receipt is stored; the confirmation_required refusal carries the exact slug the plugin would get. Show the user that slug as the plugin's permanent install name; never work a slug out yourself. Say whether the target is the organization's default project (where a new plugin reaches every member) or not (where it reaches no one until people are assigned to it). Only after the user confirms the name and slug, call create_plugin again with the same input, the same idempotency key, and confirmed: true. If it refuses, no plugin was created and this step has not finished: on slug_taken, call list_plugins for the target project again and ask whether to use the existing plugin with that slug or a different slug, then preview and confirm a different slug only as a new create, with a fresh idempotency key used for both its calls; on idempotency_key_reused, repeat the original request exactly with its original key. Continue only once the user has chosen an existing plugin or create_plugin has returned one, then call get_plugin for that plugin. If the user wants the source audience mirrored, call list_plugin_assignments for the target project, present the complete replacement set, state that it changes who receives every MCP server in that plugin, ask for explicit confirmation, then call set_plugin_assignments with the immediately preceding assignment_version as expected_assignment_version, a fresh idempotency key, and confirmed: true.get_mcp_readiness with force: true again from the same connection, then call distribute_mcp_to_plugin with the target project slug and that exact plugin. Report not_found, ambiguous_target, not_ready, or approval_required as-is and ask again rather than retrying with a different plugin or project.manage-mcp-access workflow in the target project to re-author them; do not claim access parity.get_plugin for that plugin and get_mcp for the target again. Report the live attachment, publication_state, and readiness separately. Do not claim that users have the MCP unless the returned live state supports that conclusion. The source is still enabled at this point; do not claim the cutover is complete.get_mcp for the source again and present its live state. Explain that disabling makes its endpoint unreachable for users and clears custom-domain roots while keeping the registration, plugins, and roles for rollback. After explicit confirmation, call disable_mcp with the source project slug, registration ID, mcp_id, the immediately preceding expected_version, and a fresh idempotency key. A feature_unavailable answer with reason unsupported_lifecycle_target on a Platform-managed source means another administrator registered it; do not repeat its message verbatim, and tell the user to retire it in the AICP dashboard, where its registration keeps its project slot until removed. A conflict means the source changed since the last read, for example it became public or was already disabled: call get_mcp again, present the live state, and renew confirmation; a public source is retired only in the AICP dashboard. Never delete anything.get_mcp for the source and for the target again and report both live states. Rollback stays available: enable_mcp on the source with its fresh expected_version and a fresh idempotency key restores it, and remove_mcp_from_plugin with the target project slug and plugin detaches the target membership this workflow created.Provider authorization, secret re-entry, and dashboard-only attributes are the expected out-of-agent stops. Source and target selection, the migration inventory acknowledgement, non-secret configuration, and the registration, admission, distribution, and source retirement confirmations remain explicit conversation checkpoints. All selectors and mutation-control fields remain agent-operational.
© 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
Just SKILL.md in server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects of speakeasy-api/gram.
Open the folder on GitHubat commit ad78247
Migrate MCP Between Projects 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 |
|---|---|---|---|---|---|---|
| Migrate MCP Between Projects this skillspeakeasy-api/gram | 272 | — | ~4.3k | Automated safety check: Pass | AGPL-3.0 | |
| MCP Server Builderanthropics/skills | 180k | 64 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 5 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 | |
| Fastmcp Client CLIPrefectHQ/fastmcp | 28k | 1 repos | ~823 | Automated safety check: Pass | Apache-2.0 | |
| 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.
PrefectHQ/fastmcp
Query and invoke tools on MCP servers using fastmcp list and fastmcp call.
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.
speakeasy-api/gram
A skill your agent uses when automating the Gram dashboard in a browser, capturing screenshots, inspecting pages.
speakeasy-api/gram
A skill your agent uses when adding, changing, restyling, reviewing, validating, or previewing a Gram/Speakeasy transactional email, in Go or in LMX/MJML — a template<name.go, a TemplateKey…
speakeasy-api/gram
A skill your agent uses when adding, changing, or styling UI in client/admin (the Gram admin dashboard) that touches shadcn/ui — a button, dialog, table, sidebar, badge, select, tabs, tooltip, card…
speakeasy-api/gram
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"…
speakeasy-api/gram
A skill your agent uses when changing or reviewing Gram ClickHouse schemas, migrations, queries, inserts, access principals, bootstrap SQL, Cloud compatibility, partial migration failures, or…
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…
Works with
Categories
Redeploy one Platform-managed MCP server from an explicit source AICP project to an explicit target project in the same organization, complete secure setup there, verify readiness, distribute it…. Migrate MCP Between Projects is an agent skill from speakeasy-api/gram. Redeploy one Platform-managed MCP server from an explicit source AICP project to an explicit target project in the same organization, complete secure setup there, verify readiness, distribute it, and optionally retire the source with a safe cutover through the Speakeasy AI Control Plane Platform MCP.
Migrate MCP Between Projects fits situations like: tasks that involve MCP servers.
Run `npx skills add speakeasy-api/gram --skill migrate-mcp-between-projects -a claude-code`. Or copy the skill folder (server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects in speakeasy-api/gram) into .claude/skills/migrate-mcp-between-projects in your project. Claude Code loads it when a task matches its description.
Run `npx skills add speakeasy-api/gram --skill migrate-mcp-between-projects -a codex`. Or copy the skill folder (server/internal/plugins/platform_mcp_skills/migrate-mcp-between-projects in speakeasy-api/gram) into .agents/skills/migrate-mcp-between-projects 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 speakeasy-api/gram --skill migrate-mcp-between-projects -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migrate-mcp-between-projects, .gemini/skills/migrate-mcp-between-projects, .github/skills/migrate-mcp-between-projects and .opencode/skills/migrate-mcp-between-projects in your project.
SKILL.md names no scripts, command-line tools or credentials: Migrate MCP Between Projects is instructions for the agent only.
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.
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.
Migrate MCP Between Projects 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.
About 4.3k tokens (SKILL.md is roughly 17k 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 Migrate MCP Between Projects: 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 Fastmcp Client CLI (PrefectHQ/fastmcp, 28k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
speakeasy-api (a GitHub organization) maintains it in speakeasy-api/gram, which has 272 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 8, 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.