Skip to main content

Set up MCP once for your Agents

MCP lets an Agent use tools supplied by another program or service. Skillshare stores the connection settings once and writes each supported Agent's native configuration. It does not run a gateway or keep a background server alive.

Supported MCP clients include Claude Code, Codex (the CLI, the IDE extension and the ChatGPT desktop app share one config), Cursor, VS Code, OpenCode, Kilo Code, Grok CLI, Antigravity (AGY), Amp, Claude Desktop, Cline, Copilot CLI, Factory, Gemini CLI, Goose, Junie, Kiro, LM Studio, Warp and Windsurf, plus Pi ≥ 0.99.0 through its built-in MCP. See the destination and authentication limits for each client. The dashboard shows the clients available in your current scope.

For example, share Playwright with Amp, Gemini CLI and Kiro:

mcp:
servers:
playwright:
command: npx
args: ["-y", "@playwright/mcp@latest"]
targets: [amp, gemini, kiro]

You do not need to learn each client's JSON or YAML format. Skillshare converts the definition when you run skillshare sync mcp. The receiving client starts the command, so Node.js/npx must be available in that client's environment.

Start with the guided setup​

Run skillshare mcp to browse and manage connections from the terminal. Use / to filter, e to edit, d to remove, or r to restore from a backup. Every interactive change is previewed before saving. Use skillshare mcp --no-tui for plain status output.

Initialize Skillshare first if this is a new installation, then run:

skillshare mcp add

Paste the URL or JSON supplied by your MCP provider, give it a name, select your Agents, and review the changes. Save and sync applies the settings immediately; Save only keeps the definition for a later skillshare sync mcp.

In the dashboard, Add server takes either shape: fill in the fields, or paste a configuration. The paste side also loads a file, which is the browser's equivalent of mcp import --file. Pasted JSON is recognized automatically; for TOML, choose whether it came from Codex or Grok. When the paste holds one server and Pi is ticked, the dialog also shows the Pi settings of the form: tool exposure and other Pi settings. The Skillshare tab adds skillshare mcp serve, which serves your skills over MCP to an Agent that does not get them by sync: choose which skills, tick the Agents, and it marks the Agents that already sync skills and would see them twice. Import from a target is separate and reads the servers an installed Agent already has. Either way the dashboard uses the same source, validation, preview and conflict rules as the CLI. Sync MCP, in the MCP page's Sync box, writes the MCP config files only. The Sync page also has Sync all resources for skills, agents, extras and MCP.

For Pi, the import source menu lists Pi's mcp.json and, for servers set up with pi-mcp-adapter before 0.23.0, its mcp-adapter.json; each reads only that file. The adapter file is only read: sync writes the imported servers to Pi's mcp.json. The displayed paths follow the current scope, PI_CODING_AGENT_DIR, and any account directory. Project imports read .pi/ inside that project. Keep personal servers and credentials in the global file; use project files only in trusted projects.

MCP page: one row per server with its Agents, and the Sync box

The Config editor formats YAML when you save, using two-space indentation and preserving comments. Click a field to see its explanation in the right panel, including mcp, sources.mcp, connection fields and environment references.

After syncing, reload your Agent. Complete any login or approval in that Agent. Skillshare does not test the connection, install the server program, or copy login sessions. A successful sync means the configuration was written, not that a tool call has succeeded.

Understand the two connection types​

Provider gives youConnectionExample
A command and argumentsstdio: the Agent starts a local processcommand: npx plus args
An MCP endpoint URLStreamable HTTP: the Agent connects to a running serviceurl: https://example.com/mcp

Either way, the definition is stored once and written into each Agent's own file:

You usually do not need to set transport; Skillshare infers it from command or url. A URL can point to a service on your own computer or a remote service. Use the provider's actual MCP endpoint, not an ordinary website URL. Legacy SSE configuration is rejected rather than silently converted.

Limit which tools reach the model​

A server can offer many tools. Set tools once to keep only some of them, or to hide some, and Skillshare writes it in each Agent's own format:

skillshare mcp edit github --tools-allow 'get_*,search_code' --tools-deny get_secret
skillshare sync mcp --dry-run

In the dashboard, open the server and use its Tools section; Load tools from server lists the server's tools; untick the ones the model should not get. Pi applies the whole policy; Codex and Copilot CLI apply exact names; other Agents do not apply it. The preview and skillshare mcp check name each Agent that leaves part of it out. See Tool policy.

Keep everything in one file​

This is the default. Your existing skills and agents remain directory sources; MCP connections are structured settings under mcp.servers:

sources:
skills: ~/.config/skillshare/skills
agents: ~/.config/skillshare/agents

mcp:
targets: [claude, codex, cursor, vscode]
servers:
company-docs:
url: https://docs.example.com/mcp

company-docs is a name you choose. It does not install or look up a server. Replace the example URL with your provider's endpoint. mcp.targets selects receiving clients independently of your skill targets. A server's optional targets list overrides that default.

Split MCP into its own file​

Use an external source when you want to share or version it separately:

config.yaml
sources:
skills: ~/.config/skillshare/skills
agents: ~/.config/skillshare/agents
mcp: ./mcp.yaml

mcp:
targets: [claude, codex, cursor]
mcp.yaml
servers:
company-docs:
url: https://docs.example.com/mcp

Relative paths are resolved from the directory containing config.yaml. For .skillshare/config.yaml, ./mcp.yaml means .skillshare/mcp.yaml. Absolute paths and ~/ are also supported. To share the file between machines with push / pull, keep it inside a root-scope repository; see Cross-Machine Sync — MCP servers.

Use one source at a time: sources.mcp and mcp.servers cannot coexist, including mcp.servers: {}. To switch, move the servers mapping into the external file, add sources.mcp, and remove inline mcp.servers. Keep mcp.targets in config.yaml. Preview before syncing:

skillshare sync mcp --dry-run

Both CLI and dashboard edits follow the active source. A missing or invalid external file stops synchronization; it never means “delete all servers.” Use an explicit servers: {} to remove definitions intentionally, then preview the managed removals.

Local programs and credentials​

mcp:
targets: [claude, codex]
servers:
internal-tools:
command: company-mcp
args: [--workspace, /path/to/workspace]
env:
COMPANY_TOKEN:
fromEnv: COMPANY_TOKEN
company-docs:
url: https://docs.example.com/mcp
bearerToken:
fromEnv: DOCS_TOKEN

Install the required local program yourself. The Agent must be able to find it and read any referenced environment variables in its own environment. A variable set only in a terminal may not reach an Agent launched from the desktop.

Skillshare writes variable references and never resolves them. Keep actual tokens out of source files, URLs and command arguments. Known sensitive environment or header keys require fromEnv. Import converts recognizable literal secrets, including a password inside a URL value such as DATABASE_URL, to references and reports the variable you need to set. Command arguments have no portable reference syntax: import warns when an argument looks like a credential but keeps it as plain text. Import cannot identify every credential format, such as a token in a URL path.

Codex forwards local variables by name, so env.KEY.fromEnv must also be KEY when Codex is selected. A target that cannot represent a setting blocks the preview instead of dropping it. Client-specific placeholders and input prompts must be resolved explicitly before import. Agent-specific fields such as Codex startup_timeout_sec or cwd are not imported; import lists them as warnings, and sync keeps them in that Agent's existing entry.

Import existing connections​

skillshare mcp import                         # Choose an Agent and a server
skillshare mcp import docs --from claude --target claude --target codex --sync

Import one server at a time. When an Agent's entry already matches the imported definition, it becomes managed without changing that Agent's file. When it differs, most often because a literal token became an environment reference, the CLI stops instead of rewriting a working entry. Set the reported variables, then rerun with --replace, or leave that Agent out of --target. The dashboard preview shows the same entry as a conflict.

If the source already contains the name, use the dashboard's Edit action or CLI --replace. On import, --replace also rewrites the imported Agent's own entry; Save only then records that entry as the baseline without changing the file, so the next sync rewrites it and still detects edits made in the meantime. It never overrides other conflicting native entries. In the MCP dashboard, a conflict you can settle offers an import action named after the Agent, such as Import from cursor, to adopt that version, or Replace with source to overwrite that entry. A conflict held by another Skillshare configuration that still exists offers neither, because only that configuration can release the entry.

This is also how you take over a server an Agent already has under the same name: add it to the source. If the Agent's entry already matches, the next preview lists it as Take over, and sync records it as managed without changing the file. This is what happens when you tick the Agent you imported from after the import. If it differs, the preview shows a conflict instead of overwriting it. Import it to adopt the Agent's version, or replace it with the source definition.

The MCP dashboard also looks for servers already in your Agents' config files that Skillshare does not manage. When it finds some, a note above the server list says how many and in which Agents, and Import opens the import for the first of them. A project's MCP tab does the same for that project's files and imports into that project. See Servers Skillshare does not manage.

Turn off a global server in one project​

A server in an Agent's global config loads in every project. To turn it off in one project, run this inside that project, using the name the server has in the Agent's global config:

skillshare mcp add company-docs --disabled --target opencode
skillshare sync mcp

In the dashboard, open it from the project folder with skillshare ui and choose Turn off a global server, the button beside Add server.

This works with Claude Code, OpenCode, Kilo Code and Pi 1.0.1 or later. Other Agents are refused. The command reference shows what is written for each Agent and why the others are not supported.

Project MCP tab: global servers switched per project, plus project-only servers

Remove and restore​

skillshare mcp remove company-docs
skillshare sync mcp --dry-run
skillshare sync mcp

Only unchanged entries previously managed by this configuration are removed. Unmanaged entries and entries edited by another program are protected. An Agent entry that already matched the source before Skillshare managed it, for example in a moved project, also stays; import it first if Skillshare should remove it.

In the dashboard, use the delete action on a server row. The dialog lists each Agent file that will change. Remove from source only matches mcp remove without syncing; Remove and sync also cleans the Agent files and is disabled while a conflict is present.

To stop managing a server but keep it in your Agents, remove it with --keep-files, or choose Stop managing in the dashboard's remove dialog:

skillshare mcp remove company-docs --keep-files

No Agent file changes, and later syncs leave those entries alone. See Stop managing a server.

Every native file change creates a private backup of the affected MCP entries. Skillshare keeps the newest 20 backups for each Agent file. The output includes its ID:

skillshare mcp restore BACKUP_ID --dry-run
skillshare mcp restore BACKUP_ID

In the dashboard, Backups & restore lists backups by day. Preview a backup to see the entries it would restore, then choose Restore this file.

Restore preserves unrelated settings and refuses to overwrite newer changes to the affected entries. It does not revert your source file; edit the source too if you want the restoration to survive the next sync. Backups may contain old native credentials, so keep the local state directory private.

Writes are atomic per file. A failure midway through multiple files leaves completed files applied and reports their backup IDs. Fix the reported cause and retry. The next MCP write, such as sync mcp or a dashboard sync, finishes recovering an interrupted write, and previews already show that result. If the Agent file was edited again in the meantime, entries that no longer match are reported as conflicts. Do not delete ownership state to “fix” conflicts: existing entries would become unmanaged and need explicit import again. An entry whose owning configuration was deleted does not need that: the conflict reports it as left over, and an import or replacement from the conflict itself takes it over.

See the MCP command reference for supported paths, flags and current limitations.