docs(server,examples): document extension capabilities with a runnable example (#2387)
This commit is contained in:
parent
f0bf785239
commit
49aeb8eb38
1 changed files with 187 additions and 0 deletions
37
examples/extension-capabilities/server.ts
Normal file
37
examples/extension-capabilities/server.ts
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/**
|
||||
* Declares one extension capability, `com.example/feature-flags`, with a small
|
||||
* settings object. The entry is advertised to every peer — by the `initialize`
|
||||
* result on legacy connections and by `server/discover` on modern ones.
|
||||
*
|
||||
* One binary, either transport — selected by `--http --port <N>` (defaults to
|
||||
* stdio). See `examples/CONTRIBUTING.md` for the canonical shape.
|
||||
*/
|
||||
import { createServer } from 'node:http';
|
||||
|
||||
import { parseExampleArgs } from '@mcp-examples/shared';
|
||||
import { toNodeHandler } from '@modelcontextprotocol/node';
|
||||
import { createMcpHandler, McpServer } from '@modelcontextprotocol/server';
|
||||
import { serveStdio } from '@modelcontextprotocol/server/stdio';
|
||||
|
||||
function buildServer(): McpServer {
|
||||
const mcp = new McpServer({ name: 'extension-capabilities-server', version: '1.0.0' });
|
||||
|
||||
// Declare the extension and its settings before connecting.
|
||||
mcp.server.registerCapabilities({
|
||||
extensions: { 'com.example/feature-flags': { flags: ['dark-mode', 'beta-search'] } }
|
||||
});
|
||||
|
||||
return mcp;
|
||||
}
|
||||
|
||||
const { transport, port } = parseExampleArgs();
|
||||
|
||||
if (transport === 'stdio') {
|
||||
void serveStdio(buildServer);
|
||||
console.error('[server] serving over stdio');
|
||||
} else {
|
||||
const handler = createMcpHandler(buildServer);
|
||||
createServer(toNodeHandler(handler)).listen(port, () => {
|
||||
console.error(`[server] listening on http://127.0.0.1:${port}/mcp`);
|
||||
});
|
||||
}
|
||||
Loading…
Reference in a new issue