A Cursor skill is a folder with a SKILL.md file: written instructions, plus optional scripts, references, and assets, that the agent loads when it decides the skill is relevant or when you invoke it with /skill-name. An MCP tool is a function exposed by an MCP server; the agent calls it with structured arguments and the server runs code and returns a result. Make a workflow a skill when it's mostly procedure and judgment. Make it an MCP tool when it needs live data, credentials, or a system the agent can't reach, or when the result must be exact every time.
Who this is for
You have a repeatable workflow (a release routine, a review checklist, a lookup against an internal system) and you're deciding how to package it for Cursor. Both options make the agent "able to do the thing," but they work very differently.
How each one works
Skills. Cursor discovers skills at startup from `.cursor/skills/` or `.agents/skills/` in the project, or `~/.cursor/skills/` and `~/.agents/skills/` for your user. It also loads `.claude/skills/` and `.codex/skills/` for compatibility. The `SKILL.md` frontmatter needs a `name` (matching the folder) and a `description`, which the agent uses to decide relevance. Optional fields include `paths` to scope a skill to matching files and `disable-model-invocation: true` to make it run only when you type `/skill-name`. A skill can include a `scripts/` folder; the agent runs those with the tools it already has, such as the terminal. Agent Skills is an open standard, so the format isn't Cursor-only.
MCP tools. You configure MCP servers in `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global), over `stdio`, SSE, or Streamable HTTP. In the MCP spec, tools are model-controlled: the client lists them with their input schemas and the model calls them through `tools/call`. Cursor asks for approval before using an MCP tool by default. Credentials go in the server config, ideally through `${env:NAME}` interpolation, so the agent never handles the key. If you're connecting a server that uses OAuth, see MCP OAuth in Cursor and Claude.
Decision table
| Question | Skill | MCP tool |
|---|---|---|
| What is it? | Instructions (+ optional scripts) the agent reads | Code a server runs when called |
| Who executes? | The agent, step by step, with its own tools | The server, from one structured call |
| Needs a credential or private API? | Awkward: the agent would handle the key | Yes: keep the key in server config |
| Needs exact, repeatable output? | Depends on the agent following steps | Yes: same input, same code path |
| Mostly judgment and order of steps? | Yes | Overkill |
| Where it lives | `.cursor/skills/<name>/SKILL.md` | A server entry in `mcp.json` |
| Other clients | Any client supporting the Agent Skills standard | Any MCP client (protocol is shared) |
Examples. "Before every release, bump the version, update the changelog, run tests, and summarize what changed" is a skill. "Look up a customer's plan in our billing system" is an MCP tool. "Triage a bug report using our labels, and pull the customer's plan" is a skill that tells the agent to call the billing MCP tool.
Pitfalls
- Hiding an API key inside a skill script. If the workflow needs a secret, that part belongs behind an MCP server, where the key stays in config.
- Building a server for a checklist. If every step is something the agent can already do, a skill is less to build and maintain.
- Vague descriptions. The agent picks skills by `description`. "Helpers" won't trigger; "Use when cutting a release or bumping versions" will.
- Assuming the skill can call MCP on its own. It can't. It tells the agent to, and the tool has to be connected and approved.
How to check it
- Open Customize → Skills and confirm the skill is listed. Then ask for the task in plain words and see whether the agent picks it up.
- For the MCP side, check that the tool appears in the agent's available tools, and look at the MCP Logs output panel if it doesn't.
- Run the workflow twice. If the skill version drifts where it shouldn't, move that step into a tool.
Where ShipKits fits
The Operator Pack ($47) is markdown seats + skills + install.sh — not a hosted app, not a chatbot. Seven named seats, three skills, an ops playbook and a token-cost playbook. Done means a file, PR, or URL. It's a starting point for the skill side of this decision; the MCP side is your own servers. Soft path: start at /free. Cheat Sheet for the skim checklist mindset.
Soft next step
Pick one workflow you repeat and write it as a `SKILL.md` first. Move only the step that needs a key or exact output into an MCP tool. Soft ladder: /free, then the Operator Pack ($47). Related: MCP OAuth in Cursor and Claude.