mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-04-25 15:25:15 +02:00
[WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated architecture.md * Refactor / renamed uris from test://X/resource/Y to demo://resource/X/Y
This commit is contained in:
@@ -101,12 +101,12 @@ This MCP server attempts to exercise all the features of the MCP protocol. It is
|
||||
The server provides 100 test resources in two formats:
|
||||
- Even numbered resources:
|
||||
- Plaintext format
|
||||
- URI pattern: `test://static/resource/{even_number}`
|
||||
- URI pattern: `demo://static/resource/{even_number}`
|
||||
- Content: Simple text description
|
||||
|
||||
- Odd numbered resources:
|
||||
- Binary blob format
|
||||
- URI pattern: `test://static/resource/{odd_number}`
|
||||
- URI pattern: `demo://static/resource/{odd_number}`
|
||||
- Content: Base64 encoded binary data
|
||||
|
||||
Resource features:
|
||||
|
||||
@@ -94,12 +94,12 @@ At `src/everything`:
|
||||
- `registerResources(server)` orchestrator; delegates to static and dynamic resources.
|
||||
- dynamic.ts
|
||||
- Registers two dynamic, template‑driven resources using `ResourceTemplate`:
|
||||
- Text: `test://dynamic/resource/text/{index}` (MIME: `text/plain`)
|
||||
- Blob: `test://dynamic/resource/blob/{index}` (MIME: `application/octet-stream`, Base64 payload)
|
||||
- Text: `demo://resource/dynamic/text/{index}` (MIME: `text/plain`)
|
||||
- Blob: `demo://resource/dynamic/blob/{index}` (MIME: `application/octet-stream`, Base64 payload)
|
||||
- The `{index}` path variable must be a finite integer. Content is generated on demand with a GMT timestamp.
|
||||
- static.ts
|
||||
- Registers static resources for each file in the `docs/` folder.
|
||||
- URIs follow the pattern: `test://static/docs/<filename>`.
|
||||
- URIs follow the pattern: `demo://static/docs/<filename>`.
|
||||
- Serves markdown files as `text/markdown`, `.txt` as `text/plain`, `.json` as `application/json`, others default to `text/plain`.
|
||||
|
||||
- docs/
|
||||
@@ -159,9 +159,9 @@ At `src/everything`:
|
||||
- `completable-prompt` (prompts/completions.ts): Demonstrates argument auto-completions with the SDK’s `completable` helper; `department` completions drive context-aware `name` suggestions.
|
||||
|
||||
- Resources
|
||||
- Dynamic Text: `test://dynamic/resource/text/{index}` (content generated on the fly)
|
||||
- Dynamic Blob: `test://dynamic/resource/blob/{index}` (base64 payload generated on the fly)
|
||||
- Static Docs: `test://static/docs/<filename>` (serves files from `src/everything/docs/` as static resources)
|
||||
- Dynamic Text: `demo://resource/dynamic/text/{index}` (content generated on the fly)
|
||||
- Dynamic Blob: `demo://resource/dynamic/blob/{index}` (base64 payload generated on the fly)
|
||||
- Static Docs: `demo://static/docs/<filename>` (serves files from `src/everything/docs/` as static resources)
|
||||
|
||||
## Extension Points
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ Server generates automatic log messages every 20 seconds (filtered by current lo
|
||||
|
||||
`complex_prompt` includes both text arguments and image content for testing client multi-modal handling. `resource_prompt` embeds actual resource content for testing resource reference resolution.
|
||||
|
||||
Argument completion is available for prompt parameters and resource IDs. Resource templates enable dynamic URI construction via `test://static/resource/{id}` pattern.
|
||||
Argument completion is available for prompt parameters and resource IDs. Resource templates enable dynamic URI construction via `demo://static/resource/{id}` pattern.
|
||||
|
||||
## Easter egg
|
||||
|
||||
|
||||
@@ -13,13 +13,13 @@ import {
|
||||
* - Both blob and text resources:
|
||||
* - have content that is dynamically generated, including a timestamp
|
||||
* - have different template URIs
|
||||
* - Blob: "test://dynamic/resource/blob/{index}"
|
||||
* - Text: "test://dynamic/resource/text/{index}"
|
||||
* - Blob: "demo://resource/dynamic/blob/{index}"
|
||||
* - Text: "demo://resource/dynamic/text/{index}"
|
||||
*
|
||||
* @param server
|
||||
*/
|
||||
export const registerDynamicResources = (server: McpServer) => {
|
||||
const uriBase: string = "test://dynamic/resource";
|
||||
const uriBase: string = "demo://resource/dynamic";
|
||||
const textUriBase: string = `${uriBase}/text`;
|
||||
const blobUriBase: string = `${uriBase}/blob`;
|
||||
const textUriTemplate: string = `${textUriBase}/{index}`;
|
||||
|
||||
@@ -10,7 +10,7 @@ const __dirname = dirname(__filename);
|
||||
* Register static resources for each file in the docs folder.
|
||||
*
|
||||
* - Each file in src/everything/docs is exposed as an individual static resource
|
||||
* - URIs follow the pattern: "test://static/docs/<filename>"
|
||||
* - URIs follow the pattern: "demo://static/docs/<filename>"
|
||||
* - Markdown files are served as text/markdown; others as text/plain
|
||||
*
|
||||
* @param server
|
||||
@@ -35,10 +35,10 @@ export const registerStaticResources = (server: McpServer) => {
|
||||
continue;
|
||||
}
|
||||
|
||||
const uri = `test://static/docs/${encodeURIComponent(name)}`;
|
||||
const uri = `demo://resource/static/document/${encodeURIComponent(name)}`;
|
||||
const mimeType = getMimeType(name);
|
||||
const displayName = `Docs: ${name}`;
|
||||
const description = `Static documentation file exposed from /docs: ${name}`;
|
||||
const description = `Static document file exposed from /docs: ${name}`;
|
||||
|
||||
server.registerResource(
|
||||
displayName,
|
||||
|
||||
Reference in New Issue
Block a user