developer docs · v0.1

Pull your brief by API.

Every paid subscription exposes two interfaces — an MCP server for AI agents and a small REST endpoint for ops tools and dashboards. Both require an active subscription on your account and authenticate against the same studio session cookie used by the web app.

authentication

One sign-in. One cookie.

local.intel uses the studio's universal sign-in surface at signin.0p.studio. The cookie it issues is scoped to .0p.studio, so any agent or tool that holds a valid session can call the endpoints below. The bearer-token API for agents is on the roadmap; until it ships, agents should authenticate as a human owner of the subscription they're reading.

mcp server

POST https://local-intel.0p.studio/api/mcp

Standard Model Context Protocol over HTTP. Speaks the JSON-RPC 2.0 envelope. A GET on the same URL returns a discovery document listing the tools.

Tools

list_subscriptions

List local.intel subscriptions the caller owns. Returns subscription id, tier, status, locked subject, and last/next run timestamps.

get_latest_briefargs: subscription_id (uuid)

Return the latest one-page weekly brief for a subscription. Includes praise/complaint themes, rival gaps, velocity deltas, and three actions to take this week.

get_runargs: run_id (uuid)

Fetch a specific past run by id. Returns themes, velocity, actions, and the rendered brief markdown.

Example

curl https://local-intel.0p.studio/api/mcp \
  --cookie "__Secure-0p.session-token=…" \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "get_latest_brief",
      "arguments": { "subscription_id": "<your-sub-uuid>" }
    }
  }'
rest

GET /api/brief/<subscription_id>

A small read-only endpoint for ops dashboards and Slack notifiers. Same cookie auth as the MCP server. Returns the latest run's structured payload plus the rendered markdown.

curl https://local-intel.0p.studio/api/brief/<subscription_id> \
  --cookie "__Secure-0p.session-token=…"

# 200
{
  "subscription": {
    "id":   "…",
    "tier": "single",
    "status": "active",
    "subject": { "name": "…", "category": "…", "city": "…" },
    "next_run_at": "…",
    "last_run_at": "…"
  },
  "latest": {
    "id": "…",
    "ran_at": "…",
    "themes":   { "subject": {…}, "competitors": [...] },
    "velocity": { "subject": {…}, "movers": [...] },
    "actions":  ["…", "…", "…"],
    "brief_md": "# …"
  }
}
caps and quotas

No quotas to count.

You don't pay per call. Reads are free for the active subscription that owns them. Briefs regenerate weekly on the studio cron; the API surface only reads what's already been written.

roadmap

Coming next.