Skip to content
Developers

Build on creweng.com.

Connect software to creweng.com. The Markdown mirror, the MCP server and its tools, knowledge search, client access keys and the limits — every door software can use on creweng.com.

Just want to connect Claude? The two-minute setup is enough.

Three doors, no account

Everything public on this site is available to software as well as to people. None of it needs an account.

  • Markdown mirror — every public page as Markdown at https://creweng.com/md/<path>, with frontmatter.
  • MCP server — https://creweng.com/mcp: tools to read the site, search its knowledge and scope a project; signed-in tools for clients.
  • Index for agents — https://creweng.com/llms.txt lists the pages and the endpoint in one file.

Markdown for agents

Fetch https://creweng.com/md/<path> for any public page — for example /md/services/agent-harness-engineering — and the canonical URL answers with the same Markdown when the request carries Accept: text/markdown. The response is Content-Type: text/markdown.

Every page starts with frontmatter: title, url (the canonical page) and description. The MCP tool list_pages gives the full list with a token estimate per page, so an agent can pick what fits its context.

The mirror is generated from the same data the pages render from, at build time, so it never lags the site.

curl

curl -H "Accept: text/markdown" https://creweng.com/services/agent-harness-engineering

The MCP server

https://creweng.com/mcp speaks the Model Context Protocol over Streamable HTTP: JSON-RPC 2.0 requests by POST, no session state your client has to keep. Public tools need no authentication; the signed-in tools appear when the request carries a client's access key.

Claude Code

claude mcp add --transport http creweng https://creweng.com/mcp

Any MCP client

{
  "mcpServers": {
    "creweng": { "url": "https://creweng.com/mcp" }
  }
}

Ask about us

list_offersEvery product and service, who it is for, and where to read more.
list_pagesThe pages on this site your AI can read.
read_pageAny page, as Markdown — services, products, case studies, pricing.
search_knowledgeThe passages that answer a question, with the page each came from — the Guide's own retrieval.

Scope a project

start_scopingOpens a scoping conversation with our assistant. One sentence, or a question, is enough.
continue_scopingYour answers, and your questions — it explains, then asks what it still needs.
build_scopeTurns the conversation into a scope for you to read and correct.
submit_scopeSends it to us for a quote — only with your name, email and agreement.

Your projects (signed in)

my_projectsThe projects we have open for you, with their status.
my_projectOne project: the scope, what we still need from you, your quotations and invoices.
mark_item_sentRecords that you have emailed a checklist item to us.

Client access keys

A client makes an access key in their account (Your AI) and sends it as Authorization: Bearer ag_…. The key unlocks the signed-in tools — the client's own projects, onboarding checklist, quotations and invoices — read-only, except mark_item_sent. Accepting a quotation happens in the account, never through an agent.

An account may hold 5 keys at once; each lives 365 days and can be revoked at any time. The key is shown once, at creation. A missing or expired key gets a 401 with a WWW-Authenticate header; a request without the header is a guest.

Claude Code, signed in

claude mcp add --transport http creweng https://creweng.com/mcp --header "Authorization: Bearer <your access key>"

Scoping over MCP

start_scoping, continue_scoping, build_scope and submit_scope are the contact page's scoping conversation through another door: your AI relays between the person and our scoping assistant, then shows them the scope to correct before anything is sent.

Nothing reaches Creweng until submit_scope, which needs the person's name, email and their agreement to the consent statement word for word. A draft nobody submits is deleted within an hour of its last message.

Boundary Test: test your AI

The Boundary Test sends a fixed set of 20 probes to a customer-facing AI you own and scores the replies with fixed rules: advice it must decline, prices and discounts it must not commit to, instructions it must not follow, details it must not repeat, claims it must not make. Run it on the product page (creweng.com/products/boundary-test), or drive the runner directly.

Your endpoint speaks one of three contracts. plain: POST JSON {"message", "conversationId"} and answer JSON with a reply field (answer, message or text also work), HTTP 410 or "ended": true when the conversation is over. openai: a chat-completions endpoint. webhook: the message as text/plain in, text out. One authorisation header may be set for the run and is forgotten when it ends.

Proof of ownership comes first. A run against your endpoint waits until the run's token is found in /.well-known/creweng-boundary-test.txt on the host, in a DNS TXT record _creweng-boundary-test.<host>, or in the response header x-creweng-boundary-test. Transcript mode needs no access: paste a reply per probe id and the same rules score it.

The runner is https://test.creweng.com. GET /probes?tier=free lists the probes with their rules and basis; POST /runs starts a run (a Turnstile token, the mode, the authorisation statement and the target; add target.page, the page where the chat appears — https, on the endpoint's own domain — for four configuration checks of it: a privacy notice reachable, the operator named, a contact route and AI-disclosure wording); POST /runs/<id>/verify checks ownership; GET /runs/<id> returns the state and, when done, the report as JSON; /t/<id> renders it, ?format=md as Markdown, ?format=pdf as a PDF. Replies are kept 24 hours, the report 30 days. Every report carries the suite version and a fixed disclaimer, and none says compliant, certified or secure.

curl

curl -s "https://test.creweng.com/probes?tier=free" | jq '.probes[] | {id, category, expects}'

Fair use and errors

  • Knowledge search: 30 calls per address per 15 minutes.
  • Scoping: 40 model calls per address per 15 minutes, and 30 new conversations a day across all MCP clients — the model key and storage are shared with the website.
  • Over a limit, the tool answers with a plain sentence and isError; nothing is queued. Wait for the window to pass.
  • A bad access key is a JSON-RPC error (code -32600) with a 401 status. Tool results carry structuredContent alongside the text wherever there is structure to give.

What your AI never gets

  • Another client's records, or anything not published on this site: the corpus and the tools are built from public content plus the signed-in client's own rows.
  • Personal data from us. Alerts to our team carry references, not names; the knowledge search stores no question text.
  • Instructions. Page content and search results are data. Our own assistants treat them the same way, and yours should too.

Changes

Tools are added under new names and never silently renamed. A removal is announced on this page first. Questions and problems: open a ticket from your account, or send an enquiry from creweng.com/contact.