Skip to main content
Protocol Revision: draft
The Model Context Protocol (MCP) allows servers to expose skills that can be discovered and loaded by language models. Skills provide structured instructions, workflows, and domain expertise that help models perform tasks more accurately and efficiently. Each skill is uniquely identified by a name and includes metadata describing its purpose and contents. Skills support progressive disclosure—clients load minimal metadata upfront, full instructions when relevant, and additional resources only when required.

User Interaction Model

Skills in MCP are designed to be model-controlled, meaning that the language model can discover and load skills automatically based on its contextual understanding of the task at hand. The protocol defines how skills are discovered and read. Clients are responsible for:
  • Injecting skill metadata into the model’s context at startup
  • Determining when to activate skills based on user tasks
  • Loading full skill contents when activated
  • Executing scripts with appropriate sandboxing
However, implementations are free to expose skills through any interface pattern that suits their needs—the protocol itself does not mandate any specific user interaction model.
Skills may contain executable scripts. Applications SHOULD:
  • Provide UI that makes clear which skills are available to the AI model
  • Insert clear visual indicators when skills are loaded into context
  • Present confirmation prompts before executing skill scripts

Capabilities

Servers that support skills MUST declare the skills capability:
The protocol does not specify where servers should store or discover skills. Servers may load skills from local directories, remote registries, databases, or any other source. Clients interact with skills through the protocol methods regardless of underlying storage.
  • listChanged: indicates whether the server will emit notifications when the list of available skills changes.
  • scripts: indicates whether the server’s skills include executable scripts.

Protocol Messages

Listing Skills

To discover available skills, clients send a skills/list request. This operation supports pagination. This returns metadata only—not full skill contents. This enables progressive disclosure and keeps initial context load minimal. Request:
Response:
The description field should describe both what the skill does AND when to use it. This helps models determine when to activate the skill. Keep descriptions under 1024 characters.

Context Injection

Clients SHOULD inject skill metadata into the model’s system prompt at startup so the model knows what skills are available. Recommended format (for Claude models):
Each skill should add roughly 50-100 tokens to the context. Keep the total metadata footprint minimal to leave room for activated skill instructions. For filesystem-based agents, include a location field with the path to the SKILL.md file:
For MCP-based agents, the location can be omitted since the client will use skills/read to fetch the full skill.

Reading Skills

To retrieve full skill contents, clients send a skills/read request: Request:
Response:
The instructions field contains the full Markdown body of the SKILL.md file. This is what gets loaded into the model’s context when the skill is activated.

Reading Skill References

To retrieve additional reference materials for a skill, clients send a skills/read_reference request: Request:
Response:

Executing Skill Scripts

To execute a script provided by a skill, clients send a skills/execute request: Request:
Response:

List Changed Notification

When the list of available skills changes, servers that declared the listChanged capability SHOULD send a notification:

Message Flow

Data Types

Skill Metadata

Returned by skills/list. Lightweight metadata for progressive disclosure:

Skill (Full)

Returned by skills/read. Complete skill definition:

Script Definition

Reference Definition

Annotations

Skills and their contents support optional annotations:
  • audience: Array indicating intended audience ("user", "assistant", or both)
  • priority: Number from 0.0 to 1.0 indicating importance for context inclusion
  • lastModified: ISO 8601 timestamp of last modification
Example skill with annotations:

Skill Activation

Skill activation follows the same model-controlled pattern as tools. The model sees available skill metadata in context and decides when to load full instructions based on the task at hand.

File Paths

Scripts and references use relative paths from the skill root:
Keep file references one level deep from the skill root. Avoid deeply nested reference chains.

Error Handling

Servers SHOULD return standard JSON-RPC errors for common failure cases:
  • Skill not found: -32002
  • Script execution failed: -32003
  • Reference not found: -32004
  • Internal errors: -32603
Example error:

Security Considerations

  1. Servers MUST:
    • Validate all skill names and reference paths
    • Implement proper access controls for skill content
    • Sandbox script execution environments
    • Sanitize script outputs
  2. Clients SHOULD:
    • Prompt for user confirmation before executing scripts
    • Display which skills are loaded into context
    • Implement timeouts for script execution
    • Log skill usage for audit purposes
    • Validate skill content before adding to model context
  3. Script Security:
    • Scripts SHOULD be executed in isolated environments
    • Scripts MUST NOT have access to credentials unless explicitly granted
    • Servers SHOULD implement resource limits (CPU, memory, time) for script execution

Relationship to Other Primitives

Skills complement MCP’s other primitives: Skills may reference or depend on Tools:
  • A skill’s instructions might explain when/how to use specific tools
  • A skill’s scripts are essentially bundled tool implementations
Skills differ from Prompts:
  • Prompts are user-triggered message templates
  • Skills are model-pulled instruction sets loaded on demand

Why Skills Over MCP?

Skills can also be loaded directly from the filesystem (see Agent Skills). MCP provides additional capabilities: For simple local development, filesystem-based skills may be sufficient. MCP becomes valuable when:
  • Skills need to be shared across teams or organizations
  • Skills require authentication or access control
  • Agents operate in environments without direct filesystem access
  • You want a unified protocol for tools, resources, and skills