Everything here is readable by a machine
The site publishes its content as markdown, its actions as an OpenAPI spec, and its structure as a plain-text index. No scraping, no HTML parsing, no guessing.
Discovery
Four URLs describe the whole site. Fetch any of them without a key.
- Site index
/llms.txt— Every public page, one line each, with a description.- Full content
/llms-full.txt— Prose: services, pricing, how we work, FAQ.- Actions
/openapi.json— OpenAPI 3.1 for every action an agent can take.- WebMCP
/mcp-actions.json— The same actions as WebMCP task descriptors.- Sitemap
/sitemap.xml— Canonical URLs with real lastModified dates.- Feed
/rss.xml— Full blog feed.- MCP server
/mcp— Streamable HTTP. Every action above, plus blog search and markdown, as MCP tools.
Any post, as markdown
Append .md to a post URL, or ask for the canonical URL with an Accept header. Both return YAML frontmatter plus the body — no nav, no chrome, no cookie banner.
# the .md suffix curl https://www.promptmetrics.dev/blog/ai-agents-in-production-problems.md # or negotiate on the canonical URL curl -H 'Accept: text/markdown' \ https://www.promptmetrics.dev/blog/ai-agents-in-production-problems # an index of every post curl https://www.promptmetrics.dev/blog.md
Things an agent can do
Unauthenticated JSON endpoints. /v1 is canonical; the unversioned paths are permanent aliases kept for existing callers.
# read the contract first
curl https://www.promptmetrics.dev/openapi.json
# subscribe to Field Notes
curl -X POST https://www.promptmetrics.dev/v1/actions/subscribe-blog \
-H 'Content-Type: application/json' \
-d '{"email":"[email protected]"}'Or connect it as a server
The same actions, plus blog search and post retrieval, over Streamable HTTP. No auth, no session — point any MCP client at the endpoint.
# Claude Code claude mcp add --transport http promptmetrics https://www.promptmetrics.dev/mcp # or any MCP client, pointed at https://www.promptmetrics.dev/mcp
What to expect
- Auth
- None. The action endpoints are public.
- Versioning
- In the path. Breaking changes ship under a new prefix, never in place.
- Rate limit
- 20 requests per 60 seconds per IP. Responses carry RateLimit-Policy when the limit is being enforced; a 429 carries Retry-After.
- Errors
- Typed codes: invalid_body, missing_field, invalid_email, unknown_segment, rate_limited, not_configured, upstream_error, internal_error.
- Crawlers
- AI crawlers are welcome. See /robots.txt — training is reserved via Content-Signal, retrieval is not.
The code we publish
Skills are folders of markdown, MIT licensed. There is no CLI and no npm package to install — you clone a repo and copy what you want.
- HubSpot Plugin
- Natural-language HubSpot CRM admin, with a human approving every write
/plugin install hubspot@hubspot-claude - HubSpot MCP Server
- A standalone MCP server for HubSpot CRM with a write-safety layer
/plugin install hubspot-mcp@promptmetrics-hubspot-mcp - The Human Layer
- Rehearse the hard conversation before you have it
/plugin install promptmetrics-coach@promptmetrics - The Habit Layer
- One sharp question before Claude runs a real task
/plugin install the-habit-layer@habit-layer - Video Skill
- Plan a Kurzgesagt-style explainer, ready to hand to a renderer
/plugin install promptmetrics-video@promptmetrics-video - pm-blog
- AI Blog Writing & SEO Optimization Skill for Claude Code
/plugin marketplace add promptmetrics/pm-blog