Skip to content
Clean Model Context Protocol
Lean Mean Clean Apps

Five templates, one search box. Everything in the docs is in here, including the bits we hoped you'd skim.

Try one of these

Results say which template they came from, so you won't end up reading about Lambda when you wanted GraphQL. Again.

Connect a client

The server speaks Streamable HTTP, the current remote transport in the MCP spec, so any client that supports remote servers can connect to it. Start the server with dotnet run --project ./src/Presentation and give the client http://localhost:5032/mcp. With Docker Compose the address is http://localhost:8080/mcp.

Terminal window
claude mcp add --transport http acme-movies http://localhost:5032/mcp

Then ask it something like “which movie has the best reviews?” and watch it call movies_search and movies_get on its own.

On initialize the server introduces itself with a name, title, version, description, icon and website, and a block of instructions for the model:

This server holds a catalogue of movies, the authors who review them, and their reviews. A review links one author to one movie with a star rating from 1 (worst) to 5 (best). Find things by name first: movies_search and authors_search return ids, review counts and average stars, and reviews_list filters reviews by movie or author. Every search returns one page at a time, so pass nextOffset back as the offset to continue rather than raising the limit. reviews_write creates a review, or changes the stars of one when you pass its reviewId. A review’s movie and author can’t change. reviews_delete can’t be undone, so confirm with the user before calling it. Each movie, author and review can also be read as a resource at movies://{id}, authors://{id} or reviews://{id}, and server://version gives this server’s version.

Those instructions are in WebApplicationBuilderExtensions.cs, and they’re worth keeping up to date when you add a tool. A model that knows the shape of the data makes fewer calls and better ones.

Each tool carries annotations: readOnlyHint, destructiveHint, idempotentHint and openWorldHint. A good client uses them to decide what to run without asking, what to confirm, and what to retry. reviews_delete is destructive, so Claude asks first. movies_search is read-only and idempotent, so it just runs. Set them honestly on every tool you add, because a model will believe you.