Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Design and implement MCP resource URI schemes and templates with proper naming, hierarchy, and documentation.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 47% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 252% | 0% |
Design and implement resource URI schemes for MCP servers.
Invoke this skill when you need to:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | domain | string | Yes | Resource domain (e.g., files, database) | | resources | array | Yes | Resource definitions | | language | string | No | Implementation language (default: typescript) |
json{ "domain": "database", "resources": [ { "pattern": "db://{database}/tables/{table}", "name": "Database Table", "description": "Access database table schema and data", "mimeType": "application/json", "parameters": { "database": { "description": "Database name" }, "table": { "description": "Table name" } } } ] }
typescriptimport { Resource, ResourceTemplate } from '@modelcontextprotocol/sdk/types.js'; // URI Templates const URI_TEMPLATES = { table: 'db://{database}/tables/{table}', schema: 'db://{database}/schema', query: 'db://{database}/query/{queryId}', } as const; // Parse URI to extract parameters export function parseResourceUri(uri: string): { type: keyof typeof URI_TEMPLATES; params: Record<string, string>; } | null { const patterns = [ { type: 'table' as const, regex: /^db:\/\/([^/]+)\/tables\/([^/]+)$/ }, { type: 'schema' as const, regex: /^db:\/\/([^/]+)\/schema$/ }, { type: 'query' as const, regex: /^db:\/\/([^/]+)\/query\/([^/]+)$/ }, ]; for (const { type, regex } of patterns) { const match = uri.match(regex); if (match) { if (type === 'table') { return { type, params: { database: match[1], table: match[2] } }; } else if (type === 'schema') { return { type, params: { database: match[1] } }; } else if (type === 'query') { return { type, params: { database: match[1], queryId: match[2] } }; } } } return null; } // Build URI from parameters export function buildResourceUri( type: keyof typeof URI_TEMPLATES, params: Record<string, string> ): string { let uri = URI_TEMPLATES[type]; for (const [key, value] of Object.entries(params)) { uri = uri.replace(`{${key}}`, encodeURIComponent(value)); } return uri; } // List available resource templates export function listResourceTemplates(): ResourceTemplate[] { return [ { uriTemplate: URI_TEMPLATES.table, name: 'Database Table', description: 'Access database table schema and data', mimeType: 'application/json', }, { uriTemplate: URI_TEMPLATES.schema, name: 'Database Schema', description: 'Full database schema information', mimeType: 'application/json', }, ]; }
file:// - File system resourcesdb:// - Database resourceshttp://, https:// - Web resourcesgit:// - Git repository resourcesdb://{database}/tables/{table}
db://{database}/tables/{table}/rows/{rowId}
db://{database}/views/{view}
db://{database}/functions/{function}
file:///{path}
file:///projects/{project}/src/{file}
git://{repo}/branches/{branch}/files/{path}Other measured skills in the registry, with their headline benchmark lift.