Before You Begin
Prerequisites
Before contributing, ensure you have the following installed and ready:- Git - For cloning repositories and submitting changes
- Node.js 24+ - Required for building and testing our projects
- npm - Comes with Node.js, used for dependency management
- GitHub account - For submitting pull requests and issues
- Language-specific tooling - If contributing to an SDK, you’ll need the appropriate development environment for that language (e.g., Python, Rust, Go)
Repository Structure
MCP spans multiple repositories in themodelcontextprotocol organization on GitHub. Here are
a few notable sub-projects worth checking out:
modelcontextprotocol/modelcontextprotocol, which contains the protocol spec, this documentation
site, and Spec Enhancement Proposals (SEPs).
Project Roles
MCP follows a governance model with different levels of responsibility:- Contributors - Anyone who files issues, submits PRs, or participates in discussions (that’s you!)
- Maintainers - Steward specific areas like SDKs, documentation, or Working Groups
- Core Maintainers - Guide overall project direction, review SEPs, and oversee the specification
MAINTAINERS.md
file.
Maintainers are here to help you succeed! Don’t hesitate to reach out if you have questions or
need guidance on your contribution.
Your First Contribution
Start here if you are new to MCP and contributing to its ecosystem.Step 1: Set Up Your Environment
Set up your local environment so you can test and validate changes before submitting them.Fork the repository
Clone your fork
YOUR-USERNAME with your GitHub username.Install dependencies
Verify everything works
npm run check fails, see Troubleshooting below.
Step 2: Find Something to Work On
While a lot of the items you might see tracked in the repository can feel intimidating, especially for newcomers, there are plenty of places where you can start with your first improvements:- Documentation improvements - Help us fix typos, unclear explanations, broken links, or incomplete examples
- Issues labeled
good first issue- Tackle issues tagged in the specification repo as well as our SDK repos - Schema examples - Add examples to
schema/draft/examples/to make it easier for developers to understand protocol primitives
Step 3: Make Your Change
Create your changes in a dedicated branch.Create a branch
fix/typo-in-tools-doc or feat/add-example-for-resources.Make your changes
npm run generate:schema to regenerate the JSON schema and documentation.Run checks
npm run format can auto-fix most of them.Commit with a clear message
Fix typo in tools documentation (#123)).Step 4: Submit a Pull Request
When you’re ready, push your branch and open a pull request.Push your branch
Open a PR on GitHub
Fill in the PR template
Wait for review
What Makes a Good Contribution
Help us review your contribution quickly by following these patterns:Types of Contributions
Different contributions follow different processes depending on their scope.Small Changes (Direct PR)
Simply submit a pull request directly to the repo for:- Bug fixes and typo corrections
- Documentation improvements, such as bringing clarity to an ambiguous or unclear section
- Adding examples to existing features
- Minor schema fixes that don’t materially change the specification or SDK behavior
- Test improvements
Major Changes (SEP Required)
Anything that changes the MCP specification requires following the Specification Enhancement Proposal (SEP) process. This includes, but is not limited to:- New protocol features or API methods
- Breaking changes to existing behavior
- Changes to the message format or schema structure
- New interoperability standards
- Governance or process changes
- Adding a new RPC method like
tools/execute - Changing how authentication and authorization works
- Adding a new capability negotiation field
- Modifying the transport layer specification
Working with the Specification Repository
Once you’ve determined what type of contribution you’re making, here’s how to work with the specification repository.Schema Changes
The TypeScript schema (schema/draft/schema.ts) is the source of truth for the protocol. It
defines every message type, request/response structure, and primitive (tools, resources, prompts)
that clients and servers exchange. SDK implementers across all languages rely on this schema to
build conformant implementations.
When you run npm run generate:schema, it generates:
- The JSON schema (
schema/draft/schema.json) for validation - The Schema Reference documentation (
docs/specification/draft/schema.mdx)
Edit the TypeScript schema
schema/draft/schema.ts.Add examples (optional)
schema/draft/examples/[TypeName]/ (e.g., Tool/my-example.json). Reference them in the schema using @example + @includeCode JSDoc tags.Generate JSON schema and docs
Validate your changes
Documentation Changes
Docs are written in MDX format (Markdown with JSX components) and powered by Mintlify. Thedocs/ directory contains:
docs/docs/- Guides and tutorials for getting started and building with MCPdocs/specification/- Formal protocol specification (versioned by date)
Start the local docs server
http://localhost:3000 with hot reloading.Make your changes
.mdx files. You can use Mintlify components like <Note>, <Tip>, <Steps>, and <Card> for richer formatting.Check for issues
Major Protocol Changes
For significant changes, follow the SEP process. Prior to spending a lot of time on a spec proposal, make sure to follow these best practices.Validate your idea first
Build a prototype
Find a sponsor
Write the SEP
Working with the SDK Repositories
MCP maintains official SDKs in multiple languages. Contributions are welcome - whether you’re fixing bugs, improving performance, adding features, or enhancing documentation.Before Contributing to an SDK
Before diving into code, follow these steps.Open an issue first
Join the SDK channel
#typescript-sdk-dev, #python-sdk-dev).Read the SDK's CONTRIBUTING.md
CONTRIBUTING.md with specific instructions for
setting up your development environment, coding standards, commit message
conventions, and PR requirements.Write tests
SDK Repositories
TypeScript SDK
Python SDK
Go SDK
Kotlin SDK
Java SDK
C# SDK
Swift SDK
Rust SDK
Ruby SDK
PHP SDK
Getting Help
Communication Channels
Got questions or need guidance? The MCP community is here to help.- Discord - Real-time discussion with contributors and maintainers, focused on MCP contributions (not general MCP support)
- GitHub Discussions - Exploration and conversation: feature requests, questions, roadmap planning, and proposals that need input before becoming concrete tasks
- GitHub Issues - Actionable work: bug reports with reproducible steps, documentation fixes, and tasks that are well-defined and ready to implement (not feature requests)
#auth-wg or #server-identity-wg. For SDK help, find your language’s channel (e.g.,
#typescript-sdk-dev).
Finding a Sponsor for SEPs
A sponsor is a Core Maintainer or Maintainer who champions your SEP through the review process. They provide feedback, help refine your proposal, and present it at Core Maintainer meetings. To find a sponsor:Find relevant maintainers
Tag maintainers in your PR
Share in Discord
Follow up if needed
#general or reach out to a Core
Maintainer.Troubleshooting
Sometimes things don’t go as planned - that’s completely normal! Here are solutions to common issues. If you’re still stuck, don’t hesitate to ask for help in Discord. The community is friendly and happy to help you get unstuck.npm run check fails
Common causes:
- Wrong Node.js version - Ensure you have Node.js 24+
- Missing dependencies - Run
npm installagain - Schema out of sync - Run
npm run generate:schema - Formatting issues - Run
npm run formatto auto-fix
My PR has been sitting unnoticed for weeks
- Ensure all CI checks pass
- Politely ping the desired reviewer in a comment
- Ask in the relevant Discord channel
- For urgent issues, reach out to a Core Maintainer
I can’t find a sponsor for my SEP
- Make sure your idea has been discussed in Discord or an Interest Group first
- Proposals with demonstrated community interest are more likely to find sponsors
- Consider whether your change might be too large - could it be split into smaller SEPs?
My SEP was rejected
Don’t take it personally - a SEP rejection doesn’t mean your idea was bad. SEPs can be rejected for many reasons: timing, scope, competing priorities, or simply because the protocol isn’t ready for that change yet. The feedback you receive is valuable and often points toward a path forward. Rejection is not permanent. You have a few options ahead:- Address the feedback and resubmit - Often, rejection comes with specific concerns. Addressing those concerns and resubmitting can be the right path forward.
- Discuss in Discord - Talk with maintainers to better understand the concerns. Sometimes a brief conversation reveals a simpler path forward.
- Try a different approach - Submit a new SEP that addresses the same problem differently, incorporating what you learned.
- Wait for the right moment - Circumstances change. New use cases emerge, the community grows, and priorities shift. An idea rejected today might be welcomed tomorrow.
Out of Scope
This guide covers contributions to the core MCP project - the specification, official SDKs, and documentation. Building your own MCP servers, clients, or tools is not covered here. For guidance on building with MCP, see our documentation: If you build something you’d like to share with the community, you can submit it to the MCP Registry.AI Contributions
We welcome the use of AI tools like Claude or ChatGPT to help with your contributions! If you do use AI assistance, just let us know in your pull request or issue - a quick note about how you used it (drafting docs, generating code, brainstorming, etc.) is all we need. The key is that you understand and can stand behind your contribution:- You get it - You understand what the changes do and can explain them
- You know why - You can articulate why the change is needed
- You’ve verified it - You’ve tested or validated that it works as intended
Code of Conduct
All contributors must follow the Code of Conduct. We expect respectful, professional, and inclusive interactions across all channels.License
By contributing, you agree that your contributions will be licensed under:- Code and specifications: Apache License 2.0
- Documentation (excluding specifications): CC-BY 4.0