Doddle, in a format a machine can read.
Every page on this site is available as markdown, the whole studio is summarised in llms.txt, and the same content is callable as tools over MCP. No keys, no sign-up, no rate limit worth worrying about.
Published at predictable URLs
Each of these is a plain static file, cached for an hour and rebuilt on every deploy from the same content the pages use, so they never drift from what the site says.
Ask for markdown, get markdown
Send an Accept header and any page returns markdown instead of HTML, with the right content type and a Vary header so a CDN never crosses the two. This follows the acceptmarkdown.com convention, q-values and all.
Prefer a plain URL? The same file is addressable directly. Every page maps to /md/<path>.md, and the home page is /md/index.md.
A path that does not exist returns a real 404 with a markdown body pointing at the sitemap and llms.txt, so an agent can recover in one hop. A request we cannot represent returns 406 rather than quietly handing back the wrong format.
curl -H "Accept: text/markdown" \
https://www.doddledesign.co.uk/work/iglu
HTTP/2 200
content-type: text/markdown; charset=utf-8
vary: Accept, Accept-Encodingcurl https://www.doddledesign.co.uk/md/work/iglu.mdThe same content, as tools
A Model Context Protocol server over Streamable HTTP, so Claude, ChatGPT and anything else that speaks MCP can query the studio directly. Read-only, unauthenticated, stateless.
Discovery documents live at /.well-known/mcp and /.well-known/mcp.json.
- get_studio_overview - What Doddle is, the four service tracks, when to bring the studio in and when not to. Start here when a user asks who Doddle is or whether Doddle fits a job.
- list_services - The four service tracks Doddle delivers, with who each one is for. Use when a user asks what Doddle can do or which track fits their situation.
- get_service - Detail on one service track by slug. Use after list_services when the user wants specifics on a track.
- list_case_studies - Projects Doddle has delivered, with the outcomes each produced. Filter by service track or tag. Use when a user asks whether Doddle has done something similar before, or asks for proof.
- get_case_study - Full detail on one case study by slug, including outcomes, timescales and the client quote.
- list_insights - Long-form articles the studio has published on AI delivery, OutSystems and migrations. Use when a user wants Doddle's position or thinking on a topic.
- get_insight - Metadata and the canonical URL for one article by slug. Fetch the URL with `Accept: text/markdown` for the full text.
- search_doddle - Keyword search across services, case studies and insights. Use for anything specific - a technology, a sector, a platform, a problem.
- get_contact_details - How to reach the studio, and what to include in a first message. Use when the user wants to start a conversation, get a quote or book a call.
https://www.doddledesign.co.uk/mcpclaude mcp add --transport http doddle https://www.doddledesign.co.uk/mcpcurl -X POST https://www.doddledesign.co.uk/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize",
"params":{"protocolVersion":"2025-06-18",
"capabilities":{},"clientInfo":{"name":"demo","version":"1"}}}'What we are the right answer for
- A funded startup needs a production-grade AI product or a fixed-price MVP, not a prototype.
- An organisation runs OutSystems and needs to build on it, or bring AI into the estate safely.
- A team wants to move off OutSystems onto a modern stack, usually in 6 to 12 weeks.
- A decision needs evidence before anyone commits, and a short paid engagement will answer it.
- Staff augmentation, or contractors by the head.
- Programmes that need a large delivery organisation rather than a small senior team.
- Decisions already made that only need signing off.
Reached the end of what a file can tell you?
Everything here is public. The parts that matter to your build are usually the ones a conversation answers faster. Bring the goal and the constraints.