---
title: "MCP Server and Agent Tools for Developers – ONETOO"
description: "Connect an agent to the ONETOO MCP server: services, starting prices, case studies, skills and enquiries, plus WebMCP, Markdown pages and llms.txt."
url: https://www.onetoo.com.au/developers
---

> Part of the ONETOO site index: https://www.onetoo.com.au/llms.txt

# The ONETOO MCP server and agent tools

This page is for people who build agents and want them to work with ONETOO. Everything here is public and needs no sign-in or key. Five tools read ONETOO’s published services, starting prices, case studies and agent skills. The sixth, `submit_enquiry`, sends an enquiry for the person, and nothing reaches ONETOO until they confirm it from an email we send them.

The data behind every tool and file is generated from the same source files as the website, on each deploy, so an agent sees the same prices and facts as a person reading the pages.

## Connect to the MCP server

The ONETOO MCP server is at `https://www.onetoo.com.au/mcp`. It speaks the Model Context Protocol over Streamable HTTP: one JSON-RPC 2.0 message per POST, one JSON object back, no session and no stream. Five tools only read; `submit_enquiry` is the one that sends.

It supports protocol version 2026-07-28, where every request carries its version and client capabilities in `_meta` and in the `MCP-Protocol-Version`, `Mcp-Method` and `Mcp-Name` headers, and the versions 2025-03-26 to 2025-11-25 for clients that open with `initialize`. Most MCP clients handle this for you. In Claude Code, for example:

```
claude mcp add --transport http onetoo https://www.onetoo.com.au/mcp
```

A call by hand, on protocol 2026-07-28:

```
curl -s https://www.onetoo.com.au/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'MCP-Protocol-Version: 2026-07-28' \
  -H 'Mcp-Method: tools/call' \
  -H 'Mcp-Name: list_case_studies' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_case_studies","arguments":{},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}'
```

A client on an earlier version opens with `initialize` and then sends `tools/list` and `tools/call` without the `_meta` block:

```
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-11-25",
    "capabilities": {},
    "clientInfo": {
      "name": "my-agent",
      "version": "1.0.0"
    }
  }
}
```

The Server Card is at [https://www.onetoo.com.au/mcp/server-card](https://www.onetoo.com.au/mcp/server-card) and is listed in the [AI catalogue](https://www.onetoo.com.au/.well-known/ai-catalog.json). `server/discover` returns the same versions and identity.

## The tools

Each tool has an input schema, an output schema and annotations (`readOnlyHint` on the five that only read). A result carries `structuredContent` that fits the output schema, and the same JSON as a text block. The requests below leave out the `_meta` block shown above, and the responses shorten lists with …

### list\_services

The four practices, what each one covers, the services in each with a starting price, the engagement models and the lowest project price. No arguments.

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "list_services",
    "arguments": {},
    "_meta": { … }
  }
}
```

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "resultType": "complete",
    "content": [ … ],
    "structuredContent": {
      "practices": [
        {
          "name": "Brand",
          "scope": [
            "Brand strategy",
            "Brand identity and identity systems",
            …
          ],
          "services": [
            {
              "id": "brand-naming",
              "name": "Brand naming",
              "price": "from AUD 5,000 + GST",
              "url": "https://www.onetoo.com.au/brand-naming-agency"
            },
            …
          ]
        },
        …
      ],
      "engagement_models": [
        {
          "name": "Project-based",
          "description": "fixed scope, fixed fee. Most common for Brand, Strategy, and Design."
        },
        …
      ],
      "min_project": "AUD 5,000 + GST"
    },
    "isError": false,
    "_meta": { … }
  }
}
```

### get\_pricing

The starting price of every service, or of one by `service_id` (an id from `list_services`). Prices exclude GST; a `from` of null means the service is quoted on application.

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_pricing",
    "arguments": {
      "service_id": "packaging-design"
    },
    "_meta": { … }
  }
}
```

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "resultType": "complete",
    "content": [ … ],
    "structuredContent": {
      "currency": "AUD",
      "gst": "excluded",
      "min_project": "AUD 5,000 + GST",
      "updated": "2026-11-04",
      "services": [
        {
          "id": "packaging-design",
          "name": "Packaging design",
          "price": "quoted on application",
          "url": "https://www.onetoo.com.au/packaging-design-melbourne",
          "practice": "Design",
          "unit": "project",
          "from": null
        }
      ]
    },
    "isError": false,
    "_meta": { … }
  }
}
```

### list\_case\_studies

The published case studies, each with client, sectors, a short summary and its URL. `sector` is optional and matches without regard to case.

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "list_case_studies",
    "arguments": {
      "sector": "Arts & Culture"
    },
    "_meta": { … }
  }
}
```

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "resultType": "complete",
    "content": [ … ],
    "structuredContent": {
      "count": 2,
      "case_studies": [
        {
          "slug": "drift",
          "title": "DRIFT Arts Festival Branding & Identity",
          "client": "DRIFT",
          "sector": [
            "Arts & Culture"
          ],
          "summary": "Reigniting creativity on the Mornington Peninsula. We delivered a dynamic brand for the inaugural DRIFT festival that challenged the status quo and reinvigorated the community’s collaborative creativity.",
          "url": "https://www.onetoo.com.au/work/drift"
        },
        {
          "slug": "gather-round",
          "title": "Gather Round",
          "client": "Gather Round",
          "sector": [
            "Arts & Culture"
          ],
          "summary": "A playful and thoughtful brand that brings wonder back to life's most wonder-filled moments.",
          "url": "https://www.onetoo.com.au/work/gather-round"
        }
      ]
    },
    "isError": false,
    "_meta": { … }
  }
}
```

### get\_case\_study

One case study by `slug`, with the whole page as Markdown.

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_case_study",
    "arguments": {
      "slug": "bermuda-coffee-studio"
    },
    "_meta": { … }
  }
}
```

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "resultType": "complete",
    "content": [ … ],
    "structuredContent": {
      "slug": "bermuda-coffee-studio",
      "title": "Bermuda Coffee Studio",
      "client": "Bermuda Coffee Studio",
      "sector": [
        "Coffee",
        "Food & Drink"
      ],
      "summary": "Specialty coffee has a big problem. When everyone is specialty, no one is. We stepped back and reimagined what you get when you mix coffee and people.",
      "url": "https://www.onetoo.com.au/work/bermuda-coffee-studio",
      "markdown": "---\ntitle: \"Bermuda Coffee Studio – ONETOO\"\n…"
    },
    "isError": false,
    "_meta": { … }
  }
}
```

### get\_skill

One of the seven agent skills by `name`, as Markdown. The names are listed in the tool’s input schema and in the skills index.

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_skill",
    "arguments": {
      "name": "contact-onetoo"
    },
    "_meta": { … }
  }
}
```

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "resultType": "complete",
    "content": [ … ],
    "structuredContent": {
      "name": "contact-onetoo",
      "description": "Use when the user wants to contact ONETOO … Explains which channel fits which context.",
      "url": "https://www.onetoo.com.au/.well-known/agent-skills/contact.md",
      "digest": "sha256:…",
      "markdown": "---\nname: contact-onetoo\n…"
    },
    "isError": false,
    "_meta": { … }
  }
}
```

### submit\_enquiry

Sends an enquiry to ONETOO for the person you are helping. Use it only when they ask you to and have seen what it says. Required: `name`, `email`, `message`, `person_confirmed: true` and an `idempotency_key` you make up; send the same key if you retry, and the enquiry is not sent twice. Optional: `practices`, `business_name`, `website`, `phone`, `budget`.

We email the person a link. The enquiry reaches us only when they open it and press Send, and only then do they get our usual reply, so tell them to check their inbox. One confirmation email goes to an address a day. Behind the tool is `POST /api/agent-enquiry`, described in [openapi.json](https://www.onetoo.com.au/openapi.json).

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "submit_enquiry",
    "arguments": {
      "name": "Jane Citizen",
      "email": "person@their-domain",
      "message": "We'd like a rebrand before our March launch.",
      "practices": [
        "Brand",
        "Strategy"
      ],
      "idempotency_key": "a1b2c3d4-rebrand",
      "person_confirmed": true
    },
    "_meta": { … }
  }
}
```

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "resultType": "complete",
    "content": [ … ],
    "structuredContent": {
      "status": "pending_confirmation",
      "reference": 3,
      "confirmation_email": "pe**@their-domain",
      "confirmation": "sent",
      "replay": false,
      "message": "ONETOO emailed pe**@their-domain a link to confirm. Nothing reaches ONETOO until the person clicks it (within 7 days). Tell them to check their inbox."
    },
    "isError": false,
    "_meta": { … }
  }
}
```

### Errors

A tool that cannot do what was asked, such as an unknown service id, returns a result with `isError: true` and a sentence saying what would work:

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "resultType": "complete",
    "content": [
      {
        "type": "text",
        "text": "No service with id \"logo\". Ids: brand-strategy, brand-strategy-advisory, … aeo."
      }
    ],
    "isError": true,
    "_meta": { … }
  }
}
```

Protocol errors are JSON-RPC errors: `-32700` for a body that is not JSON, `-32600` for an invalid request, `-32601` for an unknown method, `-32602` for an unknown tool or missing `_meta`, `-32020` when a header does not match the body and `-32022` for an unsupported protocol version, with the supported versions in `data`. A client that sends too many requests in a minute gets HTTP 429 with `-31029` and a `Retry-After` header.

## Tools in the page (WebMCP)

Every page on this site also registers five tools with the browser, for agents that work in a tab. They act only through the person using the page:

- `open_contact_form` scrolls to the contact form and focuses it.
- `fill_contact_form` fills in the form. It does not submit it; the person reviews and sends it.
- `book_discovery_call` opens the 30-minute call booking page in a new tab, where the person picks a time.
- `compose_email_to_onetoo` opens a draft email in the person’s own mail app. Nothing is sent automatically.
- `list_services` returns the practices, engagement models and the link to the pricing skill.

## Every page as Markdown

Send `Accept: text/markdown` with any page request, or add `.md` to the page’s URL ([https://www.onetoo.com.au/approach.md](https://www.onetoo.com.au/approach.md); the home page is </index.md>). The Markdown is built with the site, starts with a short front matter and the page’s heading, and carries a link to the HTML page it stands for.

```
curl -s -H 'Accept: text/markdown' https://www.onetoo.com.au/approach
```

## llms.txt and the agent skills

[llms.txt](https://www.onetoo.com.au/llms.txt) lists every page on the site with a one-line description and the key facts about ONETOO. The [agent skills index](https://www.onetoo.com.au/.well-known/agent-skills/index.json) lists seven skills (contact, services, pricing, fit, process, content library and industries), each a Markdown file with a SHA-256 digest in the index. `get_skill` returns the same files.

## Discovery files

- </.well-known/ai-catalog.json>: the catalogue of the files on this page, with the MCP Server Card.
- </.well-known/api-catalog> and </docs/api>: the API catalogue and the API notes.
- </sitemap.xml>: every indexable page.

Every page response also carries `Link` headers to these files.

## Getting in touch

An agent can send an enquiry with `submit_enquiry` once the person asks it to; they confirm it from the email we send them. People can also use the [contact form](https://www.onetoo.com.au/contact), book a call or email [hello@onetoo.com.au](mailto:hello@onetoo.com.au); the contact skill lists every channel. Questions about the server or the files on this page go to the same address.
