Skip to content

Commit b7ab514

Browse files
authored
Merge branch 'main' into main
2 parents 1ffc44f + 222ba8e commit b7ab514

11 files changed

Lines changed: 652 additions & 76 deletions

File tree

.prototools

Whitespace-only changes.

AGENTS.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,26 @@ JSON examples live in `schema/[version]/examples/[TypeName]/`:
3737
## Useful Commands
3838

3939
```bash
40+
# Dev servers
4041
npm run serve:docs # Local Mintlify docs server
4142
npm run serve:blog # Local Hugo blog server
43+
44+
# Generation (run after editing source files)
45+
npm run generate # Generate all (schema + SEPs)
4246
npm run generate:schema # Generate JSON schemas + MDX from TypeScript
43-
npm run check:docs # Check formatting and links
47+
npm run generate:seps # Generate SEP documents
48+
49+
# Formatting
50+
npm run format # Format all (docs + schema)
51+
npm run format:docs # Format markdown/MDX files
52+
npm run format:schema # Format schema TypeScript files
53+
54+
# Checks
4455
npm run check # Run all checks
56+
npm run check:schema # Check schema (TS, JSON, examples, MDX)
57+
npm run check:docs # Check docs (format, comments, links)
58+
npm run check:seps # Check SEP documents
59+
60+
# Workflow
61+
npm run prep # Full prep before committing (check, generate, format)
4562
```

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ npm run format
7272

7373
> [!NOTE]
7474
> You can run all schema/documentation
75-
> changes at once with `npm run prep:changes`.
75+
> changes at once with `npm run prep`.
7676
7777
## Blog changes
7878

docs/clients.mdx

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ description: "A list of applications that support MCP integrations"
55

66
{/* prettier-ignore-start */}
77

8-
export const CAPABILITIES = ["Resources", "Prompts", "Tools", "Discovery", "Sampling", "Roots", "Elicitation", "Instructions", "Tasks"];
8+
export const FEATURES = ["Resources", "Prompts", "Tools", "Discovery", "Sampling", "Roots", "Elicitation", "Instructions", "Tasks"];
99

1010
export const filterStore = {
1111
state: {
12-
selectedCapabilities: [],
12+
selectedFeatures: [],
1313
searchText: "",
1414
visibleCount: 0,
1515
totalCount: 0
@@ -36,11 +36,11 @@ export const useFilterStore = () => {
3636
};
3737

3838
export const useFilter = ({ name, supports }) => {
39-
const { selectedCapabilities, searchText } = useFilterStore();
39+
const { selectedFeatures, searchText } = useFilterStore();
4040

4141
const isVisible = (
4242
name.toLowerCase().includes(searchText.toLowerCase()) &&
43-
selectedCapabilities.every(cap => supports?.includes(cap))
43+
selectedFeatures.every(feature => supports?.includes(feature))
4444
);
4545

4646
useEffect(() => {
@@ -60,24 +60,24 @@ export const useFilter = ({ name, supports }) => {
6060

6161

6262
export const ClientFilter = () => {
63-
const { selectedCapabilities, searchText, visibleCount, totalCount } = useFilterStore();
63+
const { selectedFeatures, searchText, visibleCount, totalCount } = useFilterStore();
6464

6565
useEffect(() => {
66-
filterStore.setState({ selectedCapabilities: [], searchText: "" });
66+
filterStore.setState({ selectedFeatures: [], searchText: "" });
6767
}, []);
6868

69-
const toggleCapability = (cap) => {
70-
const newCaps = selectedCapabilities.includes(cap)
71-
? selectedCapabilities.filter(c => c !== cap)
72-
: [...selectedCapabilities, cap];
73-
filterStore.setState({ selectedCapabilities: newCaps });
69+
const toggleFeature = (feature) => {
70+
const newFeatures = selectedFeatures.includes(feature)
71+
? selectedFeatures.filter(f => f !== feature)
72+
: [...selectedFeatures, feature];
73+
filterStore.setState({ selectedFeatures: newFeatures });
7474
};
7575

7676
const clearFilters = () => {
77-
filterStore.setState({ selectedCapabilities: [], searchText: "" });
77+
filterStore.setState({ selectedFeatures: [], searchText: "" });
7878
};
7979

80-
const hasFilters = selectedCapabilities.length > 0 || searchText.length > 0;
80+
const hasFilters = selectedFeatures.length > 0 || searchText.length > 0;
8181

8282
return (
8383
<div className="p-4 border border-gray-200 dark:border-gray-700 rounded-lg bg-gray-50 dark:bg-gray-800/50">
@@ -105,25 +105,25 @@ export const ClientFilter = () => {
105105
</div>
106106
<div className="mt-4">
107107
<div className="text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
108-
Filter by capabilities:
108+
Filter by features:
109109
</div>
110110
<div className="flex flex-wrap gap-2">
111-
{CAPABILITIES.map(cap => (
111+
{FEATURES.map(feature => (
112112
<button
113-
key={cap}
114-
onClick={() => toggleCapability(cap)}
113+
key={feature}
114+
onClick={() => toggleFeature(feature)}
115115
className={`flex items-center gap-1.5 px-2 py-1 rounded text-sm transition-colors cursor-pointer ${
116-
selectedCapabilities.includes(cap)
116+
selectedFeatures.includes(feature)
117117
? 'bg-primary/10 text-primary dark:bg-gray-700 dark:text-gray-100'
118118
: 'text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800'
119119
}`}
120120
>
121121
<Icon
122-
icon={selectedCapabilities.includes(cap) ? "square-check" : "square"}
123-
iconType={selectedCapabilities.includes(cap) ? "solid" : "regular"}
122+
icon={selectedFeatures.includes(feature) ? "square-check" : "square"}
123+
iconType={selectedFeatures.includes(feature) ? "solid" : "regular"}
124124
size={16}
125125
/>
126-
{cap}
126+
{feature}
127127
</button>
128128
))}
129129
</div>

docs/community/seps/2133-extensions.mdx

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { Badge } from "/snippets/badge.mdx";
2828

2929
This SEP establishes a lightweight framework for extending the Model Context Protocol through optional, composable extensions. This proposal defines a governance model and presentation structure for extensions that allows the MCP ecosystem to evolve while maintaining core protocol stability. Extensions enable experimentation with new capabilities without forcing adoption across all implementations, providing clear extension points for the community to propose, review, and adopt enhanced functionality.
3030

31-
At this stage we are only defining official extensions, i.e. those maintained by MCP maintainers. Externally maintained extensions will likely come at a later stage once this initial SEP is approved.
31+
This SEP defines both official extensions (maintained by MCP maintainers) and experimental extensions (an incubation pathway for Working Groups and Interest Groups to prototype and collaborate on extension ideas before formal acceptance). Externally maintained extensions will likely come at a later stage.
3232

3333
## Motivation
3434

@@ -48,7 +48,7 @@ Breaking changes MUST use a new identifier, e.g. `io.modelcontextprotocol/oauth-
4848

4949
Extensions may have settings that are sent in client/server messages for fine-grained configuration.
5050

51-
For now, we only define _Official Extensions_. _Unofficial extensions_ will not yet be recognized by MCP governance, but may be introduced and governed by developers and distributed in non official channels like GitHub.
51+
This SEP defines _Official Extensions_ and _Experimental Extensions_. Experimental extensions are maintained within the MCP organization as an incubation pathway but are not yet officially accepted. _Unofficial extensions_ are not recognized by MCP governance and may be introduced and governed by developers outside the MCP organization.
5252

5353
### Official Extensions
5454

@@ -66,17 +66,34 @@ An _extension_ is a versioned specification document within an extension reposit
6666

6767
While day-to-day governance is delegated to extension repository maintainers, the core maintainers retain ultimate authority over official extensions, including the ability to modify, deprecate, or remove any extension.
6868

69+
### Experimental Extensions
70+
71+
Experimental extensions provide an incubation pathway for Working Groups (WGs) and Interest Groups (IGs) to facilitate discovery, prototype ideas, and collaborate on extension concepts before formal SEP submission. Experimental extensions allow cross-company collaboration under neutral governance with clear anti-trust protection and IP clarity.
72+
73+
An _experimental extension repository_ is a repository within the official modelcontextprotocol github org with the `experimental-ext-` prefix, e.g. `https://github.com/modelcontextprotocol/experimental-ext-interceptors`.
74+
75+
- Any maintainer MAY create an experimental extension repository while the associated SEP is still in draft state (or before a SEP has been submitted).
76+
- Experimental extensions MUST be associated with a Working Group or Interest Group, whose maintainers are responsible for day-to-day governance of the repository.
77+
- Experimental extension repositories MUST clearly indicate their experimental/non-official status (e.g., in the README) to avoid confusion with official extensions.
78+
- Any published packages from experimental extensions MUST use naming that clearly indicates their experimental status.
79+
- Core maintainers retain oversight of experimental extension repositories, including the ability to archive or remove them.
80+
81+
To graduate an experimental extension to official status, the standard SEP process (Extensions Track) applies. The experimental repository and any reference implementations developed during incubation MAY be referenced in the SEP to demonstrate the extension's practicality.
82+
6983
### Lifecycle
7084

7185
#### Creation
7286

73-
Extensions are initially created via a SEP in the [main MCP repository](https://github.com/modelcontextprotocol/modelcontextprotocol/) using the [standard SEP guidelines](https://modelcontextprotocol.io/community/sep-guidelines) but with a new type: **Extensions Track**. This type follows the same review and acceptance process as Standards Track SEPs, but clearly indicates that the proposal is for an extension rather than a core protocol addition. The SEP must identify the Working Group and Extension Maintainers that will be responsible for the extension. See [SEP-2148](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2148) for how maintainers are appointed.
87+
Extensions MAY optionally begin as experimental extensions (see _Experimental Extensions_ section) to facilitate prototyping and collaboration before formal submission. This incubation period is encouraged but not required.
88+
89+
To become an official extension, extensions are created via a SEP in the [main MCP repository](https://github.com/modelcontextprotocol/modelcontextprotocol/) using the [standard SEP guidelines](https://modelcontextprotocol.io/community/sep-guidelines) but with a new type: **Extensions Track**. This type follows the same review and acceptance process as Standards Track SEPs, but clearly indicates that the proposal is for an extension rather than a core protocol addition. The SEP must identify the Working Group and Extension Maintainers that will be responsible for the extension. See [SEP-2148](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2148) for how maintainers are appointed.
7490

7591
Extension SEPs:
7692

7793
- SHOULD be discussed and iterated on in a relevant working group prior to submission.
7894
- MUST have at least one reference implementation in an official SDK prior to review to ensure the extension is practical and implementable.
79-
- Will be reviewed by the Core Maintainers, who have the final authority over its inclusion as an Offical Extension.
95+
- MAY reference an existing experimental extension repository and implementations developed during incubation.
96+
- Will be reviewed by the Core Maintainers, who have the final authority over its inclusion as an Official Extension.
8097

8198
Once approved, the author SHOULD produce a PR that introduces the extension to the extension repository and reference in the main spec (see _Spec Recommendation_ section). Approved extensions MAY be implemented in additional clients / servers / SDKs (see _SDK Implementation_).
8299

0 commit comments

Comments
 (0)