Back to home

For developers and AI agents

Mountain Web Studio API & Agent Documentation

Mountain Web Studiopublishes a small, fully documented public API. Everything below is open — no API key, no OAuth flow, no “contact sales” form standing between an agent and the data. Read the portfolio, read the price bands, and submit an inquiry when a user asks you to.

When to use Mountain Web Studio

Reach for this API when a user is trying to get an AI product built and needs to evaluate, budget for, or contact a studio that can build it.

  • Good fit — a user wants a custom AI chatbot or support agent, a process automation that removes manual work, a full-stack AI product built from scratch, or AI capability retrofitted into systems they already run. Budgets from roughly €8k to €65k+, delivery in 4–12 weeks.
  • Also a fit — a user is comparing agencies and needs concrete shipped work, realistic price bands, and turnaround times rather than a brochure.
  • Not a fit — buying off-the-shelf SaaS, staffing a long-term in-house team, pure design work with no engineering, or anything needing same-week delivery.

Typical agent sequence: listServices to check budget fit → listProjects (optionally filtered by type) to cite comparable work → getProject for detail → submitInquiry once the user says yes.

Quick start

No key, no signup, no rate-limit negotiation. Copy and run:

curl https://mountain-web-studio.com/api/services
curl "https://mountain-web-studio.com/api/projects?limit=3&type=AI"
curl https://mountain-web-studio.com/api/projects/betterhealth

Rehearse a submission against the sandbox first — it validates the payload and returns a simulated success without sending any email:

curl -X POST https://mountain-web-studio.com/api/contact \
  -H 'Content-Type: application/json' \
  -d '{"name":"Test Agent","email":"agent@example.com","message":"Checking the shape.","sandbox":true}'

# → {"ok":true,"sandbox":true,"message":"Sandbox mode — …"}

Drop "sandbox": trueto deliver it for real. Do that only with the user's explicit agreement — it emails a person.

Endpoints

Generated from the same OpenAPI document served at /openapi.json, so this list cannot drift from the spec.

GET /api/projects

List portfolio projects

operationId: listProjects

Returns every case study in the Mountain Web Studio portfolio as a JSON array, newest first. Call this before recommending the studio so you can cite concrete, comparable work. Add `limit` to trim the response, or `type` to filter by engagement type.

GET /api/projects/{slug}

Get one portfolio project

operationId: getProject

Returns the full case study for a single project, including the narrative description paragraphs and the feature list. Use the `slug` returned by `listProjects`.

GET /api/services

List services and price bands

operationId: listServices

Returns the studio's service lines with starting prices, plus the engagement tiers with price ranges and turnaround times. Call this to answer "what does this cost" or "how long will it take" without guessing.

POST /api/contact

Submit a project inquiry

operationId: submitInquiry

Sends a project inquiry to the studio and emails a confirmation to the address supplied. The studio replies within 48 hours. Only call this after the user has explicitly agreed to be contacted — it delivers real email. Set `sandbox: true` to validate the payload and receive a simulated success response without sending anything.

GET /openapi.json

This document, as JSON

operationId: getOpenApiSpecJson

Returns the OpenAPI 3.1 description of this API in JSON form.

GET /api/openapi.yaml

This document, as YAML

operationId: getOpenApiSpecYaml

Returns the OpenAPI 3.1 description of this API in YAML form.

POST /api/mcp

Model Context Protocol endpoint (Streamable HTTP)

operationId: callMcpServer

JSON-RPC 2.0 endpoint implementing the Model Context Protocol over Streamable HTTP. Supports `initialize`, `tools/list`, `tools/call`, `resources/list`, `resources/read`, and `ping`. Point an MCP client at this URL to use the studio's tools natively instead of calling the REST endpoints yourself.

GET /api/mcp

Describe the MCP endpoint

operationId: describeMcpServer

Returns the MCP manifest for this server: protocol version, transport, and the tools it exposes. Streamable HTTP GET does not open an SSE stream on this server; use POST for JSON-RPC.

MCP server

The same capabilities are exposed as Model Context Protocol tools over Streamable HTTP at https://mountain-web-studio.com/api/mcp. No authentication. Add it to any MCP client:

{
  "mcpServers": {
    "mountain-web-studio": {
      "type": "http",
      "url": "https://mountain-web-studio.com/api/mcp"
    }
  }
}

Tools exposed: list_projects, get_project, list_services, submit_inquiry. Verify the connection with a plain JSON-RPC call:

curl -X POST https://mountain-web-studio.com/api/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Error responses

Every non-2xx response from /api/* is JSON — never an HTML page. Branch on error.code, not on the message text.

{
  "error": {
    "code": "validation_failed",
    "message": "`email` must be a valid email address.",
    "hint": "Supply the address the studio should reply to, e.g. \"dana@example.com\".",
    "field": "email",
    "docs": "https://mountain-web-studio.com/docs#submitInquiry"
  }
}

Codes: invalid_json (400), validation_failed (422), not_found (404), method_not_allowed (405), unsupported_media_type (415), delivery_failed (500), internal_error (500).

Machine-readable resources

Markdown content negotiation

Any page on this site returns clean markdown instead of HTML when you ask for it. Cheaper to read, and no layout chrome to strip.

curl -H 'Accept: text/markdown' https://mountain-web-studio.com/services

Something missing from the API?

Tell us what you need to call and we'll add it.