Skip to content

Commit 4a8db2c

Browse files
authored
Merge branch 'main' into localden/auth-guide
2 parents c190796 + 68deffe commit 4a8db2c

File tree

19 files changed

+330
-51
lines changed

19 files changed

+330
-51
lines changed

CONTRIBUTING.md

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,38 @@ The following software is required to work on the spec:
1818
### Getting Started
1919

2020
1. [Fork the repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo)
21+
2122
2. Clone your fork:
2223

23-
```bash
24-
git clone https://github.com/YOUR-USERNAME/modelcontextprotocol.git
25-
cd modelcontextprotocol
26-
```
24+
```bash
25+
git clone https://github.com/YOUR-USERNAME/modelcontextprotocol.git
26+
cd modelcontextprotocol
27+
```
2728

2829
3. Install dependencies:
2930

30-
```bash
31-
nvm install # install correct Node version
32-
npm install # install dependencies
33-
```
31+
```bash
32+
nvm install # install correct Node version
33+
npm install # install dependencies
34+
```
3435

35-
## Schema changes
36+
4. Create a new branch:
3637

37-
Note that schema changes are made to `schema.ts`, and `schema.json` is generated from
38-
`schema.ts`.
38+
```bash
39+
git checkout -b feature/your-feature-name
40+
```
3941

40-
1. Create a new branch:
42+
## Schema changes
43+
44+
Schema changes go in `schema/draft/schema.ts`. To validate your changes, run:
4145

4246
```bash
43-
git checkout -b feature/your-feature-name
47+
npm run check:schema:ts
4448
```
4549

46-
2. Make your changes.
47-
48-
3. Validate schema changes and generate `schema.json`:
50+
`schema/draft/schema.json` and `docs/specification/draft/schema.mdx` are generated from `schema/draft/schema.ts`; do not edit them directly. To generate them, run:
4951

5052
```bash
51-
npm run check:schema:ts
5253
npm run generate:schema
5354
```
5455

MAINTAINERS.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ This document lists current maintainers in the Model Context Protocol project.
7171

7272
- [Alex Hancock](https://github.com/alexhancock)
7373

74+
### PHP SDK
75+
76+
- [Kyrian Obikwelu](https://github.com/CodeWithKyrian)
77+
- [Christopher Hertel](https://github.com/chr-hertel)
78+
7479
## Project Maintainers
7580

7681
### use-mcp
@@ -126,6 +131,10 @@ This document lists current maintainers in the Model Context Protocol project.
126131
- [Harald Kirschner](https://github.com/digitarald)
127132
- [Connor Peet](https://github.com/connor4312)
128133

134+
### Financial Services Interest Group
135+
136+
- [Sambhav Kothari](https://github.com/sambhav)
137+
129138
### Transports Interest Group
130139

131140
- [Kurtis Van Gent](https://github.com/kurtisvg)
@@ -137,8 +146,10 @@ This document lists current maintainers in the Model Context Protocol project.
137146

138147
- [Nick Cooper](https://github.com/nicknotfun)
139148

140-
### Long-Running / Async Tool Calls Working Group
149+
### Agents Working Group
141150

151+
- [Peter Alexander](https://github.com/pja-ant)
152+
- [Luca Chang](https://github.com/LucaButBoring)
142153
- [Inna Harper](https://github.com/ihrpr)
143154

144155
## About This Document

docs/clients.mdx

Lines changed: 82 additions & 4 deletions
Large diffs are not rendered by default.

docs/community/working-interest-groups.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ These groups exist to:
2222

2323
## Mechanisms
2424

25+
## Meeting Calendar
26+
27+
All Interest Group and Working Group meetings are published on the public MCP community calendar at [meet.modelcontextprotocol.io](https://meet.modelcontextprotocol.io/).
28+
29+
Facilitators are responsible for posting their meeting schedules to this calendar in advance to ensure discoverability and enable broader community participation.
30+
2531
### Interest Groups (IGs)
2632

2733
**Goal:** Facilitate discussion and knowledge-sharing among MCP contributors who share interests in a specific MCP sub-topic or context. The primary focus is on identifying and gathering problems that may be worth addressing through SEPs or other community artifacts, while encouraging open exploration of protocol issues and opportunities.
@@ -30,6 +36,8 @@ These groups exist to:
3036

3137
- Regular conversations in the Interest Group Discord channel
3238
- **AND/OR** a recurring live meeting regularly attended by Interest Group members
39+
- Meeting dates and times published in advance on the [MCP community calendar](https://meet.modelcontextprotocol.io/) when applicable, and tagged with their primary topic and interest group Discord channel name (e.g. `auth-ig`)
40+
- Notes publicly shared after meetings, as a GitHub issue ([example](https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1629)) and/or public Google Doc
3341

3442
**Examples**:
3543

@@ -68,6 +76,8 @@ Participation in an Interest Group (IG) is not required to start a Working Group
6876

6977
- Meaningful progress towards at least one SEP or spec-related implementation **OR** hold maintenance responsibilities for a project (e.g., Inspector, Registry, SDKs)
7078
- Facilitators are responsible for keeping track of progress and communicating status when appropriate
79+
- Meeting dates and times published in advance on the [MCP community calendar](https://meet.modelcontextprotocol.io/) when applicable, and tagged with their primary topic and working group Discord channel name (e.g. `agents-wg`)
80+
- Notes publicly shared after meetings, as a GitHub issue ([example](https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1629)) and/or public Google Doc
7181

7282
**Examples**:
7383

docs/docs.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -377,10 +377,6 @@
377377
"source": "/docs/concepts",
378378
"destination": "/docs/learn/architecture"
379379
},
380-
{
381-
"source": "/docs/tools",
382-
"destination": "/legacy/tools/inspector"
383-
},
384380
{
385381
"source": "/docs/tutorials/use-remote-mcp-server",
386382
"destination": "/docs/develop/connect-remote-servers"

docs/docs/develop/build-client.mdx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,10 @@ When you submit a query:
392392
- Validate server responses
393393
- Be cautious with tool permissions
394394

395+
4. **Tool Names**
396+
- Tool names can be validated according to the format specified [here](/specification/draft/server/tools#tool-names)
397+
- If a tool name conforms to the specified format, it should not fail validation by an MCP client
398+
395399
## Troubleshooting
396400

397401
### Server Path Issues

docs/docs/develop/build-server.mdx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ Writing to stdout will corrupt the JSON-RPC messages and break your server.
5959
### Best Practices
6060

6161
1. Use a logging library that writes to stderr or files.
62+
1. Tool names should follow the format specified [here](/specification/draft/server/tools#tool-names).
6263

6364
### Quick Examples
6465

@@ -1856,6 +1857,17 @@ tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
18561857
2. Make sure the path to your project is absolute and not relative
18571858
3. Restart Claude for Desktop completely
18581859

1860+
<Warning>
1861+
1862+
To properly restart Claude for Desktop, you must fully quit the application:
1863+
1864+
- **Windows**: Right-click the Claude icon in the system tray (which may be hidden in the "hidden icons" menu) and select "Quit" or "Exit".
1865+
- **macOS**: Use Cmd+Q or select "Quit Claude" from the menu bar.
1866+
1867+
Simply closing the window does not fully quit the application, and your MCP server configuration changes will not take effect.
1868+
1869+
</Warning>
1870+
18591871
**Tool calls failing silently**
18601872

18611873
If Claude attempts to use the tools but they fail:

docs/docs/learn/architecture.mdx

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,6 @@ graph TB
5555
Client1 ---|"One-to-one<br/>connection"| Server1
5656
Client2 ---|"One-to-one<br/>connection"| Server2
5757
Client3 ---|"One-to-one<br/>connection"| Server3
58-
59-
style Client1 fill:#e1f5fe
60-
style Client2 fill:#e1f5fe
61-
style Client3 fill:#e1f5fe
62-
style Server1 fill:#f3e5f5
63-
style Server2 fill:#f3e5f5
64-
style Server3 fill:#f3e5f5
6558
```
6659

6760
Note that **MCP server** refers to the program that serves context data, regardless of

docs/docs/learn/client-concepts.mdx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ In addition to making use of context provided by servers, clients may provide se
1414
| Feature | Explanation | Example |
1515
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
1616
| **Sampling** | Sampling allows servers to request LLM completions through the client, enabling an agentic workflow. This approach puts the client in complete control of user permissions and security measures. | A server for booking travel may send a list of flights to an LLM and request that the LLM pick the best flight for the user. |
17-
| **Roots** | Roots allow clients to specify which files servers can access, guiding them to relevant directories while maintaining security boundaries. | A server for booking travel may be given access to a specific directory, from which it can read a user's calendar. |
17+
| **Roots** | Roots allow clients to specify which directories servers should focus on, communicating intended scope through a coordination mechanism. | A server for booking travel may be given access to a specific directory, from which it can read a user's calendar. |
1818
| **Elicitation** | Elicitation enables servers to request specific information from users during interactions, providing a structured way for servers to gather information on demand. | A server booking travel may ask for the user's preferences on airplane seats, room type or their contact number to finalise a booking. |
1919

2020
### Elicitation
@@ -108,7 +108,7 @@ Roots define filesystem boundaries for server operations, allowing clients to sp
108108

109109
#### Overview
110110

111-
Roots are a mechanism for clients to communicate filesystem access boundaries to servers. They consist of file URIs that indicate directories where servers can operate, helping servers understand the scope of available files and folders. Rather than giving servers unrestricted filesystem access, roots guide them to relevant working directories while maintaining security boundaries.
111+
Roots are a mechanism for clients to communicate filesystem access boundaries to servers. They consist of file URIs that indicate directories where servers can operate, helping servers understand the scope of available files and folders. Rather than giving servers unrestricted filesystem access, roots guide them to relevant working directories. While roots communicate intended boundaries, actual security is always maintained by the client's access controls.
112112

113113
**Root structure:**
114114

@@ -121,8 +121,6 @@ Roots are a mechanism for clients to communicate filesystem access boundaries to
121121

122122
Roots are exclusively filesystem paths and always use the `file://` URI scheme. They help servers understand project boundaries, workspace organization, and accessible directories. The roots list can be updated dynamically as users work with different projects or folders, with servers receiving notifications through `roots/list_changed` when boundaries change.
123123

124-
It's important to note that while roots provide guidance to servers about where to operate, the client is always in full control of file access. Roots simply communicate intended boundaries—actual file access is always mediated by the client's security policies.
125-
126124
#### Example: Travel Planning Workspace
127125

128126
A travel agent working with multiple client trips benefits from roots to organize filesystem access. Consider a workspace with different directories for various aspects of travel planning.
@@ -133,15 +131,23 @@ The client provides filesystem roots to the travel planning server:
133131
- `file:///Users/agent/travel-templates` - Reusable itinerary templates and resources
134132
- `file:///Users/agent/client-documents` - Client passports and travel documents
135133

136-
When the agent creates a Barcelona itinerary, the server works within these boundaries—accessing templates, saving the new itinerary, and referencing client documents. It cannot access files outside these roots. Servers typically access files within roots by using relative paths from the root directories or by utilizing file search tools that respect the root boundaries.
134+
When the agent creates a Barcelona itinerary, well-behaved servers respect these boundaries—accessing templates, saving the new itinerary, and referencing client documents within the specified roots. Servers typically access files within roots by using relative paths from the root directories or by utilizing file search tools that respect the root boundaries.
137135

138136
If the agent opens an archive folder like `file:///Users/agent/archive/2023-trips`, the client updates the roots list via `roots/list_changed`.
139137

138+
For a complete implementation of a server that respects roots, see the [filesystem server](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem) in the official servers repository.
139+
140+
#### Design Philosophy
141+
142+
Roots serve as a coordination mechanism between clients and servers, not a security boundary. The specification requires that servers "SHOULD respect root boundaries," and not that they "MUST enforce" them, because servers run code the client cannot control. This design is pragmatic: clients enforce security while roots communicate intent.
143+
144+
Roots work best when servers are trusted or vetted, users understand their advisory nature, and the goal is preventing accidents rather than stopping malicious behavior. They excel at context scoping (telling servers where to focus), accident prevention (helping well-behaved servers stay in bounds), and workflow organization (such as managing project boundaries automatically).
145+
140146
#### User Interaction Model
141147

142148
Roots are typically managed automatically by host applications based on user actions, though some applications may expose manual root management:
143149

144-
**Automatic root detection**: When users open folders, clients automatically expose them as roots. Opening a travel workspace gives servers access to itineraries and documents within that directory.
150+
**Automatic root detection**: When users open folders, clients automatically expose them as roots. Opening a travel workspace allows the client to expose that directory as a root, helping servers understand which itineraries and documents are in scope for the current work.
145151

146152
**Manual root configuration**: Advanced users can specify roots through configuration. For example, adding `/travel-templates` for reusable resources while excluding directories with financial records.
147153

0 commit comments

Comments
 (0)