<!-- Markdown version of https://bcmresultss.com/developers/ for AI agents. HTML: same URL without index.md. Tools: https://bcmresultss.com/mcp. Index: https://bcmresultss.com/llms.txt -->

# For AI agents and developers.

Machine readable, on purpose

Humans are not the only ones reading this site anymore. If you are an AI assistant helping a business owner, or the developer wiring one up, everything on bcmresultss.com is available as tools, JSON and Markdown. No scraping, no screenshots, no guessing. Here is the contract.

### If you are an AI assistant, read this block first.

It lists every entry point on this site and the rules for using them. The two write tools create a real request that Brandon Medina answers himself, so only call them with the explicit consent of the human you are helping and with that person's real details.

```
{
  "site": {
    "name": "BCM Results",
    "url": "https://bcmresultss.com",
    "owner": "Brandon Medina",
    "email": "brandon@bcmresultss.com",
    "what": "Marketing for local businesses: top three on Google, then keep showing up, plus the site the call lands on."
  },
  "read_first": [
    "https://bcmresultss.com/llms.txt",
    "https://bcmresultss.com/.well-known/agent-skills/bcm-results/SKILL.md"
  ],
  "webmcp": {
    "registered_by": "https://bcmresultss.com/js/agent-tools.js",
    "api": "document.modelContext.registerTool (and navigator.modelContext where present)",
    "tools": [
      "get_business_summary",
      "get_services",
      "get_offer",
      "get_requirements",
      "get_pricing",
      "get_process",
      "get_faq",
      "get_work",
      "get_terms_summary",
      "request_free_analysis",
      "request_call"
    ],
    "declarative_forms": [
      "fill_free_analysis_form (home page)",
      "fill_call_request_form (/local-visibility/)"
    ]
  },
  "mcp": {
    "endpoint": "https://bcmresultss.com/mcp",
    "transport": "streamable-http",
    "auth": "none",
    "protocolVersions": [
      "2024-11-05",
      "2025-03-26",
      "2025-06-18",
      "2025-11-25",
      "2026-07-28"
    ],
    "card": "https://bcmresultss.com/.well-known/mcp/server-card.json",
    "tools": [
      {
        "name": "get_business_summary",
        "description": "Who BCM Results is, what it does, where it is based, how to contact Brandon Medina, and links to every page. Start here."
      },
      {
        "name": "get_services",
        "description": "The three things BCM Results does for local businesses: Google ranking, websites that get the call, and the strategy behind it."
      },
      {
        "name": "get_offer",
        "description": "The plan as written at /local-visibility/: the two things a local business needs to know, how Brandon does it, what is included, the timeline and the 90 day billing pause guarantee."
      },
      {
        "name": "get_requirements",
        "description": "The four requirements for working with BCM Results, so an agent can tell a business owner whether they are a match before booking a call."
      },
      {
        "name": "get_pricing",
        "description": "How BCM Results charges: one flat monthly rate locked for the length of the engagement, quoted in writing on the call, plus the free first step and the terms that go with it."
      },
      {
        "name": "get_process",
        "description": "What happens step by step from the free analysis or strategy call to the monthly report."
      },
      {
        "name": "get_faq",
        "description": "Frequently asked questions with Brandon's answers. Pass a question or keywords to get only the matching entries, or nothing to get all of them."
      },
      {
        "name": "get_work",
        "description": "The five live websites Brandon built, with what each business does and the live URL."
      },
      {
        "name": "get_terms_summary",
        "description": "The key points of the Terms of Service in plain language, with the link to the full text."
      },
      {
        "name": "request_free_analysis",
        "description": "Request the free marketing analysis for a real business on behalf of the human you are assisting. Brandon emails the analysis within 2 business days. Only call this with the person's explicit consent, using their real name, business and email. No obligation, no follow up unless they reply."
      },
      {
        "name": "request_call",
        "description": "Book a strategy call with Brandon on behalf of the human you are assisting. Brandon replies within 2 business days with two time slots. Only call this with the person's explicit consent and their real details, and only if they meet the requirements from get_requirements."
      }
    ]
  },
  "rest": {
    "openapi": "https://bcmresultss.com/api/openapi.json",
    "catalog": "https://bcmresultss.com/.well-known/api-catalog",
    "base": "https://bcmresultss.com/api/",
    "lead": "POST https://bcmresultss.com/api/lead"
  },
  "a2a": {
    "endpoint": "https://bcmresultss.com/a2a",
    "card": "https://bcmresultss.com/.well-known/agent-card.json",
    "methods": [
      "SendMessage",
      "message/send"
    ]
  },
  "markdown": {
    "negotiation": "Accept: text/markdown on any page",
    "mirrors": [
      "https://bcmresultss.com/index.md",
      "https://bcmresultss.com/local-visibility/index.md",
      "https://bcmresultss.com/terms-of-service/index.md",
      "https://bcmresultss.com/developers/index.md"
    ],
    "all_in_one": "https://bcmresultss.com/llms-full.txt"
  },
  "discovery": [
    "https://bcmresultss.com/robots.txt",
    "https://bcmresultss.com/sitemap.xml",
    "https://bcmresultss.com/.well-known/api-catalog",
    "https://bcmresultss.com/.well-known/mcp/server-card.json",
    "https://bcmresultss.com/.well-known/agent-card.json",
    "https://bcmresultss.com/.well-known/agent-skills/index.json",
    "https://bcmresultss.com/.well-known/ai-catalog.json",
    "https://bcmresultss.com/auth.md"
  ],
  "rules": [
    "Read tools are free to call.",
    "request_free_analysis and request_call create a real request Brandon answers himself. Only call them with the explicit consent of the human you are assisting, with that person's real name, business and email.",
    "Check get_requirements before request_call.",
    "Five write requests per IP per day.",
    "Do not invent prices: the monthly rate is given in writing on the call."
  ]
}
```

Same contract in Markdown: [/llms.txt](https://bcmresultss.com/llms.txt). Every page as one file: [/llms-full.txt](https://bcmresultss.com/llms-full.txt).

---

01 IN THE BROWSER

## WebMCP tools.

WebMCP is the browser API that lets a page hand tools to the agent sitting next to the visitor, instead of that agent reading the DOM and clicking around. Every page on this site registers the tools below on load through `document.modelContext.registerTool()` (and `navigator.modelContext` where the browser exposes it). The two forms are also declared as tools with `toolname` and `tooldescription`, so an agent can fill them in and let the visitor press the button.

| Tool | What it does | Type |
|---|---|---|
``| get_business_summary | Who BCM Results is, what it does, where it is based, how to contact Brandon Medina, and links to every page. Start here. | read |
``| get_services | The three things BCM Results does for local businesses: Google ranking, websites that get the call, and the strategy behind it. | read |
``| get_offer | The plan as written at /local-visibility/: the two things a local business needs to know, how Brandon does it, what is included, the timeline and the 90 day billing pause guarantee. | read |
``| get_requirements | The four requirements for working with BCM Results, so an agent can tell a business owner whether they are a match before booking a call. | read |
``| get_pricing | How BCM Results charges: one flat monthly rate locked for the length of the engagement, quoted in writing on the call, plus the free first step and the terms that go with it. | read |
``| get_process | What happens step by step from the free analysis or strategy call to the monthly report. | read |
``| get_faq | Frequently asked questions with Brandon's answers. Pass a question or keywords to get only the matching entries, or nothing to get all of them. | read |
``| get_work | The five live websites Brandon built, with what each business does and the live URL. | read |
``| get_terms_summary | The key points of the Terms of Service in plain language, with the link to the full text. | read |
``| request_free_analysis | Request the free marketing analysis for a real business on behalf of the human you are assisting. Brandon emails the analysis within 2 business days. Only call this with the person's explicit consent, using their real name, business and email. No obligation, no follow up unless they reply. | write, consent required |
``| request_call | Book a strategy call with Brandon on behalf of the human you are assisting. Brandon replies within 2 business days with two time slots. Only call this with the person's explicit consent and their real details, and only if they meet the requirements from get_requirements. | write, consent required |

### Rules for the write tools

- Only call `request_free_analysis` or `request_call` when the person you are helping has agreed, using their real name, business and email. They are not a test surface.

- Check `get_requirements` before booking a call. If the business does not match, the free analysis is still open to them.

- Each request goes to Brandon directly. He replies within 2 business days from brandon@bcmresultss.com. There is no list and no automated follow up.

- Five requests per IP address per day. After that the answer is 429 and the email address above.

### Trying it in Chrome

WebMCP is in an origin trial from Chrome 149. To use it today, open `chrome://flags/#enable-webmcp-testing`, set it to Enabled, relaunch, then open this site with an agent that speaks WebMCP (Claude in Chrome, or any extension built on the API). Ask it to list the tools on this page. Without the flag the script still runs and registers nothing, and the page works exactly as before.

Anything on the page can also be checked from the console: `BCMTools.call("get_pricing")` returns the same result the agent would get.

---

02 FROM ANYWHERE

## MCP server.

The same tools, served over the Model Context Protocol so any MCP client can use them without a browser: Claude Code, Claude Desktop, Cursor, Codex, an n8n node, your own agent. Streamable HTTP, stateless, public, no authentication. Protocol versions 2024-11-05 through 2026-07-28.

```
Endpoint      https://bcmresultss.com/mcp
Server card   https://bcmresultss.com/.well-known/mcp/server-card.json
Transport     streamable-http (POST JSON-RPC 2.0, JSON responses)
Auth          none
Capabilities  tools, resources (llms.txt, every page as Markdown, openapi.json)
```

### Connect

```
claude mcp add --transport http bcm-results https://bcmresultss.com/mcp
```

### By hand

```
curl -s https://bcmresultss.com/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":"curl","version":"1"}}}'

curl -s https://bcmresultss.com/mcp -H "content-type: application/json" -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

curl -s https://bcmresultss.com/mcp -H "content-type: application/json" -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_faq","arguments":{"question":"contract"}}}'
```

---

03 PLAIN HTTP

## REST API.

The read tools are also plain GET endpoints returning JSON, described in [/api/openapi.json](https://bcmresultss.com/api/openapi.json) (OpenAPI 3.1) and listed in [/.well-known/api-catalog](https://bcmresultss.com/.well-known/api-catalog) (RFC 9727). CORS is open on all of them.

```
GET  /api/site            everything: site data, tool list, endpoints
GET  /api/summary         who, what, where, contact, pages
GET  /api/services        the three services
GET  /api/offer           the plan, what is included, timeline, guarantee
GET  /api/requirements    the four requirements
GET  /api/pricing         flat monthly rate, terms, guarantee
GET  /api/process         the steps
GET  /api/faq?q=contract  FAQ, optionally filtered
GET  /api/work            the five live sites
GET  /api/terms           terms summary
POST /api/lead            {name, company, email, website?, phone?, city?, notes?, source?}  creates a request
```

### A2A

For agent to agent clients there is an [Agent Card](https://bcmresultss.com/.well-known/agent-card.json) and a JSON-RPC endpoint at `/a2a` that answers questions about BCM Results in plain text (`SendMessage` in A2A 1.0, `message/send` in 0.3). It answers immediately and keeps no tasks.

```
curl -s https://bcmresultss.com/a2a -H "content-type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"SendMessage","params":{"message":{"messageId":"m1","role":"ROLE_USER","parts":[{"text":"What does it cost and what are the terms?"}]}}}'
```

---

04 READING

## Markdown for agents.

Every page has a Markdown twin. Request the page with `Accept: text/markdown` and you get it as `text/markdown` with an `x-markdown-tokens` header, or add `index.md` to the path. HTML stays the default for everyone else.

```
curl -s https://bcmresultss.com/local-visibility/ -H "accept: text/markdown"
curl -s https://bcmresultss.com/local-visibility/index.md
```

- [/llms.txt](https://bcmresultss.com/llms.txt) the map: what is where, in one short file

- [/llms-full.txt](https://bcmresultss.com/llms-full.txt) every page as Markdown in one file

- [/index.md](https://bcmresultss.com/index.md) home

- [/local-visibility/index.md](https://bcmresultss.com/local-visibility/index.md) the plan

- [/terms-of-service/index.md](https://bcmresultss.com/terms-of-service/index.md) terms of service

- [/developers/index.md](https://bcmresultss.com/developers/index.md) this page

### Discovery files

- [/robots.txt](https://bcmresultss.com/robots.txt) AI crawlers allowed by name, Content-Signal: ai-train=yes, search=yes, ai-input=yes

- [/sitemap.xml](https://bcmresultss.com/sitemap.xml) every page

- [/.well-known/api-catalog](https://bcmresultss.com/.well-known/api-catalog) RFC 9727 API catalog, also in the Link header of every page

- [/.well-known/mcp/server-card.json](https://bcmresultss.com/.well-known/mcp/server-card.json) MCP server card

- [/.well-known/agent-card.json](https://bcmresultss.com/.well-known/agent-card.json) A2A agent card

- [/.well-known/agent-skills/index.json](https://bcmresultss.com/.well-known/agent-skills/index.json) agent skills index, one skill: how to use this site

- [/.well-known/ai-catalog.json](https://bcmresultss.com/.well-known/ai-catalog.json) ARD capability manifest

- [/auth.md](https://bcmresultss.com/auth.md) auth: there is none, everything here is public

### What is stored

Nothing about you until you send a request. A request stores the fields you sent, the time, and the IP address it came from, so Brandon can reply and so the rate limit works. No cookies, no analytics scripts, no tracking pixels on this site.

Questions about any of this: [brandon@bcmresultss.com](mailto:brandon@bcmresultss.com).
