[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:
cliffhall
2025-12-05 18:54:30 -05:00
parent eee9866ebb
commit 743529180e
5 changed files with 15 additions and 15 deletions

View File

@@ -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:

View File

@@ -94,12 +94,12 @@ At `src/everything`:
- `registerResources(server)` orchestrator; delegates to static and dynamic resources.
- dynamic.ts
- Registers two dynamic, templatedriven 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 SDKs `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

View File

@@ -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

View File

@@ -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}`;

View File

@@ -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,