---
title: "Danny Keane Developer Docs: API and MCP Server"
description: "Danny Keane's developer docs for dannykeane.com: the REST API and its OpenAPI 3.1 spec, two MCP servers, auth.md, llms.txt, and open-source tools like figmanage."
canonical: https://dannykeane.com/developers
last-updated: 2026-09-27
---

# Danny Keane Developer Docs: API and MCP Server

Developer docs for dannykeane.com, Danny Keane's site: the REST API and its OpenAPI spec, two MCP servers, auth.md, and llms.txt. Everything built for programmatic use -- by agents, crawlers, and developers -- at one predictable URL. Open source tools are on GitHub; the endpoints below are live on this domain, unauthenticated.

Three resources have their own pages: the Danny Keane REST API reference at /developers/api, the Danny Keane MCP Server at /developers/mcp, and the SDKs and CLI at /developers/sdk. This page summarizes them and indexes the rest.

## Danny Keane MCP server

This site runs its own Model Context Protocol server over Streamable HTTP. Point any MCP client at https://dannykeane.com/mcp -- no auth, no registration. Four tools: get_about (background, career, skills; section for just the story or the career table), get_work_history (full history across Guild.ai, Jasper.ai, Titan, Google/YouTube, Zesty, and side projects, or one role in detail with company), get_contact (email, LinkedIn, Twitter, GitHub, Figma; channel for one), and get_page (full content of a specific page by slug). Same data as llms.txt, queryable per topic instead of read whole.

The server manifest is published at /.well-known/mcp.json, /.well-known/mcp/server-card.json, and /.well-known/mcp/server-cards.json -- the same document at every path MCP discovery conventions have used, so any scanner finds it.

- [MCP manifest](/.well-known/mcp.json)
- [Danny Keane MCP Server docs](/developers/mcp)

## Danny Keane docs MCP server

A second MCP server, for the documents rather than the profile: point a client at https://dannykeane.com/docs/mcp to search and read this page, the privacy policy, and the rest of the site's documents. Two tools: search_docs (the sections that match a query, each with its source URL) and get_doc (one document whole, as Markdown). Same bodies the .md routes serve; no auth.

- [Docs MCP server card](/docs/mcp/server-card)
- [Docs server tools and setup](/developers/mcp)

## llms.txt

A machine-readable summary of who Danny Keane is, in the llms.txt format: current role, career history, side projects, availability, and contact. llms-full.txt is the complete version with the detail attached. Both are plain text at the standard paths.

developers/llms.txt is a section-scoped version of this page -- just the developer resources, for agents that want that scope without the whole profile.

- [llms.txt](/llms.txt)
- [llms-full.txt](/llms-full.txt)
- [developers/llms.txt](/developers/llms.txt)

## Danny Keane REST API

The public HTTP endpoints -- live visitor stats, the GitHub contribution calendar, a cursor-paginated list of roles (/api/v1/work), the Habbo NPC chat and avatar proxy, event tracking, a batch endpoint for bulk reads, and the web app manifest -- are documented in an OpenAPI 3.1 spec at /openapi.json. No auth on any of them.

The stable surface is versioned under /api/v1 (see Versioning and deprecation below). Every error is a structured JSON object with a machine-readable code, a message, and a hint -- including 404s and 405s, so no probe ever hits an HTML page. Every response carries advisory RateLimit headers (60 requests per 60-second window per endpoint), and a 429 carries Retry-After.

Async batch: send Prefer: respond-async to /api/v1/batch for a 202 and a Location to poll (/api/v1/jobs/{id}). Jobs are stateless -- the id carries the request, the batch runs when you poll, nothing is stored -- and ids expire after an hour.

- [openapi.json](/openapi.json)
- [api-catalog](/.well-known/api-catalog)
- [api/llms.txt](/api/llms.txt)
- [Danny Keane REST API reference](/developers/api)

## Danny Keane SDKs and CLI

Official client libraries for the REST API, published as dannykeane on npm, PyPI, and RubyGems. All three are zero-dependency, cover every data operation in the OpenAPI spec -- work history with cursor pagination, the GitHub contribution calendar, live stats, the NPC chat, and batch reads -- raise the API's ErrorResponse as a typed error, and retry a 429 after its Retry-After.

Each package also installs the official dannykeane command-line tool: one command per API operation, the API's JSON on stdout, and errors on stderr as ErrorResponse JSON with a non-zero exit code, so agents can pipe it.

Install with npm i dannykeane, pip install dannykeane, or gem install dannykeane. Every method, every CLI command, and usage examples are on the SDKs and CLI page.

- [Danny Keane SDKs and CLI docs](/developers/sdk)
- [dannykeane on npm](https://www.npmjs.com/package/dannykeane)
- [dannykeane on PyPI](https://pypi.org/project/dannykeane/)
- [dannykeane on RubyGems](https://rubygems.org/gems/dannykeane)

## Versioning and deprecation

The stable surface is /api/v1. Breaking changes ship as a new version prefix, never in place. A deprecated endpoint answers with a Deprecation header (RFC 9745) and, once a removal date is set, a Sunset header (RFC 8594) at least six months before removal. Nothing is deprecated today.

Every /api response carries Link: <https://dannykeane.com/developers>; rel="sunset" -- the RFC 8594 pointer to this policy -- so a client can find it from any call.

## Authentication

None. Every endpoint, both MCP servers, and every discovery document here are public, read-only (bar anonymous event tracking), and anonymous: no account, no API key, no OAuth. auth.md says the same for agents that look for it there.

- [auth.md](/auth.md)

## Natural-language query (NLWeb)

GET or POST /ask accepts a natural-language query and returns the same real answers the MCP tools and terminal give -- about, work history, or contact -- routed by simple keyword matching, not a generated guess. Request SSE streaming with Accept: text/event-stream, a streaming=true query param, or {"prefer": {"streaming": true}} in the POST body; the stream emits start, result, and complete events.

## Markdown content negotiation

Every page on this site content-negotiates: send Accept: text/markdown to /, /about, /contact, /privacy, /habbo, or this page and the same URL returns a Markdown body rendered from the same copy the HTML ships. Each page also serves a literal .md twin at the same path (/about.md, /contact.md, and so on) for clients that fetch a suffix instead of negotiating -- both return the same frontmatter-led body.

- [index.md](/index.md)
- [pricing.md](/pricing.md)

## Agent discovery manifests

Beyond the MCP server card, this domain publishes an Agentic Resource Discovery catalog, an Agent Skills index, and an A2A-shaped agent card -- three views of the same tools, for clients that check different well-known paths.

The three profile tools also ship as standalone Agent Skills -- each a SKILL.md file under /skills, checked into this repo and served as-is, with a SHA-256 digest in the Agent Skills index so a client can verify the file it fetched is the one advertised.

The whole site is also bundled as an Agent Plugin (agent-plugins.org): plugin.json at the site root, with the same MCP server declared in a sibling mcp.json and the same skills discovered from /skills.

The homepage also answers /?mode=agent with a structured JSON view -- the same MCP tools, REST endpoints, and resource links above, for clients that check a query-param convention instead of negotiating on Accept.

- [ai-catalog.json](/.well-known/ai-catalog.json)
- [agent-skills index](/.well-known/agent-skills/index.json)
- [agent-card.json](/.well-known/agent-card.json)
- [get-about SKILL.md](/skills/get-about/SKILL.md)
- [get-work-history SKILL.md](/skills/get-work-history/SKILL.md)
- [get-contact SKILL.md](/skills/get-contact/SKILL.md)
- [plugin.json](/plugin.json)
- [mcp.json](/mcp.json)

## Open-source tools

figmanage: open source CLI and MCP server for Figma workspace admin. 122 tools covering seats, permissions, billing, files, and components -- the Figma admin API surface exposed to AI agents. Runs locally, connects to any MCP client, and chains into larger agent workflows. 3K+ downloads in its first week (2026). The official CLI ships on npm: npm install -g figmanage.

Figma plugins: design-to-dev handoff tooling, Redlines and others. 130K+ installs, used at Google, Facebook, Apple, and Airbnb.

GitHub holds the source for both, plus the Bootstrap CSS animation work that shipped to Mars on NASA's Ingenuity helicopter.

- [figmanage](https://github.com/dannykeane/figmanage)
- [figmanage on npm](https://www.npmjs.com/package/figmanage)
- [Figma plugins](https://figma.com/@dannykeane)
- [GitHub](https://github.com/dannykeane)

## Crawling and indexing

robots.txt allows AI search and answer engines, lets GPTBot and ClaudeBot crawl, and declines training (Content-Signal ai-train=no); sitemap.xml lists every indexable route with real last-modified dates. Questions, bug reports, or an agent hitting something unexpected: email me@dannykeane.co.uk.

- [robots.txt](/robots.txt)
- [sitemap.xml](/sitemap.xml)
- [me@dannykeane.co.uk](mailto:me@dannykeane.co.uk)

## Elsewhere

- [Home](https://dannykeane.com/)
- [About](https://dannykeane.com/about)
- [Contact](https://dannykeane.com/contact)
- [Habbo](https://dannykeane.com/habbo)
- [Privacy](https://dannykeane.com/privacy)
- [llms.txt](https://dannykeane.com/llms.txt) -- machine-readable summary
- [llms-full.txt](https://dannykeane.com/llms-full.txt) -- the complete version
