Resource Templates

👨‍💼 Now that you've registered a static resource, let's make things more dynamic! In this step, you'll use MCP's resource templates to expose a whole family of resources—each with its own unique URI and data.
Resource templates let you define parameterized resources, like epicme://entries/{id} or epicme://tags/{id}. This means clients can discover and read individual entries or tags by their unique identifiers, just like accessing a file by its path.
Here's a dynamic "hello world" resource template example that reads names from a database:
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js'

agent.server.registerResource(
	'hello',
	new ResourceTemplate('hello://{name}', {
		// this is required to be specified, but we'll implement it later...
		list: undefined,
	}),
	{
		title: 'Hello',
		description: 'Say hello to anyone by name!',
	},
	async (uri, { name }) => {
		return {
			contents: [
				{
					mimeType: 'text/plain',
					text: `Hello, ${name}!`,
					uri: uri.toString(),
				},
			],
		}
	},
)
Your goal in this step:
  • Use resource templates to expose entries and tags from your database, each accessible by a unique URI.
Test this out by clicking the "List Templates" button in the MCP Inspector.

Please set the playground first

Loading "Resource Templates"
Loading "Resource Templates"

No tests here 😢 Sorry.