Skip to content

SESSION 10 — BRIEFS FOR ALEX

16 March 2026


HOW TO USE THIS DOCUMENT

Tim: There are THREE briefs in this document. Paste them to Alex ONE AT A TIME using the brief drip rule. Confirm each is deployed before pasting the next.

Order to paste:

  1. Brief #14: Mercury Ops Integration (UCCO Foundation) — wires Mercury bank data into ops.ucco.foundation
  2. Brief #15: Standard Graphics Unit + Finance Page Split — reusable chart component, then copy finance page to UCCA
  3. Brief #16: MCP Compliance + Discovery Layer + Human Bridge — .well-known endpoints, HTTP headers, HTML link tags, and the MCP badge/explainer overlay on both sites

Also still waiting from Session 9 (paste BEFORE these): - Signal Corrections Brief (UCCO-MCP-Signal-Corrections-Brief.md) — 5 MCP tools have wrong content. Paste this first if not already done.

One verbal note to Alex alongside Brief #16:

"Section 5 about deploying mcp.ucca.online as a stub is superseded — you've already built the full 8-tool server. Just fix the 522 DNS routing issue and add the .well-known endpoints to what's already deployed."

---

BRIEF #14 — Mercury Ops Integration (UCCO Foundation — Proof of Connection)

SURFACE: ops.ucco.foundation (ucco-ops)
CF ACCOUNT: aed3398a4e698767328cc3a9e698721d
DO NOT TOUCH: ops.ucca.online, ucca-engine, ucca-site, ucca-ir, ucca-keys, ucca-api, mcp.ucca.online, rtopacks.com.au, ucco.foundation, ucco-site, pioneer.ucco.foundation, mcp.ucco.foundation, pr.ucco.foundation

→ TIM

This brief wires Mercury bank data into the UCCO Foundation ops console as a proof of connection. We're using the UCCA Inc Mercury account (the only Mercury org that exists right now) to build and prove the plumbing. When the foundation incorporates and opens its own Mercury org, we rekey the credential — same code, different token, now showing the foundation's own money.

This is deliberately lightweight. The goal is: 1. Board members log into ops.ucco.foundation and see a treasury summary card — "we have banking infrastructure, it's connected, here's the balance" 2. L1 admins (you and Jimmy) see the full account list with balances 3. The MercuryClient class, D1 cache layer, and API routes are proven and portable

The serious finance surface — full transaction views, category breakdowns, payment controls, reporting — gets built later in UCCA ops where the commercial entity actually needs it. That's a separate, bigger brief. This one just gets the pipes connected and the board dashboard looking real.

What you need to do before Alex can wire it live: - Generate a Mercury API token: Mercury dashboard → Settings → API Tokens → Generate - Give it to Alex to set as a Wrangler secret


→ ALEX

0. Context

Mercury REST API base: https://backend.mercury.com/api/v1 Auth: Bearer token in Authorization header.

Tim will provide the API token after this brief is deployed. Store it as: - Wrangler secret: MERCURY_API_TOKEN on the ucco-ops Worker (UCCO Foundation CF account: aed3398a4e698767328cc3a9e698721d)

⚠️ This token connects to the UCCA Inc Mercury org (the only one that exists). When UCCO Foundation opens its own Mercury org, the token gets swapped — no code changes needed.

1. Mercury API Client

Create src/lib/mercury.ts in the ucco-ops repo (or shared lib if one exists).

Base URL: https://backend.mercury.com/api/v1
Auth: Bearer {MERCURY_API_TOKEN}

Implement a MercuryClient class that takes the bearer token in its constructor.

Methods:

Method Endpoint Returns
getAccounts() GET /accounts All accounts
getAccount(id) GET /account/{id} Single account with balance
getTransactions(id, opts) GET /account/{id}/transactions Transactions (supports limit, offset, start, end)
getOrganization() GET /organization Org info (name, EIN, DBAs)

All methods return typed responses. Handle errors gracefully: - 401 → return { error: 'auth_failed', message: 'Mercury API token invalid or expired' } - 404 → return { error: 'not_found' } (some savings accounts return 404 via API — this is expected) - 429 → return { error: 'rate_limited' } - Network error → return { error: 'network_error' }

Never throw. Always return error objects.

Rekey comment block at the top of the file:

// REKEY PATH: This client is entity-agnostic.
// Currently connected to: UCCA Inc Mercury org (proof of connection)
// When UCCO Foundation opens its own Mercury org:
// 1. Generate new API token from the new Mercury org
// 2. Replace MERCURY_API_TOKEN secret on this Worker
// 3. No code changes needed — same endpoints, same shapes
//
// When UCCA ops needs its own connection:
// 1. Copy this file to ucca-engine
// 2. Set MERCURY_API_TOKEN on the ucca-ops Worker
// 3. Build the full finance surface (separate brief)

2. D1 Cache Layer

Add to the UCCO ops D1 database (use whichever D1 is bound to the ucco-ops Worker):

CREATE TABLE IF NOT EXISTS mercury_cache (
  cache_key TEXT PRIMARY KEY,
  data TEXT NOT NULL,
  cached_at TEXT NOT NULL DEFAULT (datetime('now')),
  expires_at TEXT NOT NULL
);

Cache strategy: - Account balances: 15 minutes. Key: mercury:accounts - Organisation info: 24 hours. Key: mercury:org - Transactions: NOT CACHED in this brief. Transaction views are UCCA-ops scope, not this brief.

Cache read: check expires_at > datetime('now'). Miss or expired → fetch from Mercury → write to cache → return.

3. Ops API Routes

Add to the ucco-ops Worker API router:

GET /api/mercury/summary        → Aggregate summary (L1 + L2)
GET /api/mercury/accounts       → All active accounts with balances (L1 only)
POST /api/mercury/refresh       → Force cache invalidation + refetch (L1 only)

That's it. Three routes. No transaction endpoints in this brief.

/api/mercury/summary response shape (L1 + L2):

{
  "entity": "UCCA Inc",
  "entity_note": "Proof of connection — UCCO Foundation Mercury account pending incorporation",
  "total_balance": 194.30,
  "active_accounts": 3,
  "currency": "USD",
  "cached_at": "2026-03-15T10:00:00Z",
  "connection_status": "live"
}

/api/mercury/accounts response shape (L1 only):

{
  "accounts": [
    {
      "id": "96806c4a-...",
      "nickname": "Checking",
      "kind": "checking",
      "balance": 110.32,
      "last4": "3940",
      "status": "active"
    }
  ],
  "total_balance": 194.30,
  "cached_at": "2026-03-15T10:00:00Z"
}

Security rules: - Full account numbers (accountNumber) NEVER returned to frontend. Only last4. - Routing numbers OK at L1. - All Mercury API calls server-side. Browser never talks to Mercury. - L2 sees summary only. No account-level detail.

4. Hardcoded Fallback

If MERCURY_API_TOKEN is not set or Mercury API is unreachable, return a fallback state so the UI still renders:

{
  "connection_status": "not_connected",
  "entity": "Pending",
  "total_balance": null,
  "active_accounts": null,
  "message": "Mercury API not connected. Generate a token in Mercury → Settings → API Tokens."
}

Known accounts that respond via API (for reference, not hardcoded in responses):

Account ID Nickname Last Known Balance
96806c4a-f3bb-11ef-a761-0763ccf76b25 Checking $110.32
95a9b204-f3bb-11ef-a761-0329a3dc8733 Stripe Clearing $83.78
9574988a-f3bb-11ef-a761-539e54529a16 PayPal USA Clearing $0.20

Three other accounts (QBI Clearing, Shopify, UCCO Foundation in trust) return 404 via API — savings accounts with restricted access. If they appear in the /accounts response, show them. If they 404, skip silently.

Seven archived accounts on old routing 084106768 — ignore entirely.

5. Frontend — Board Dashboard Treasury Card

On the existing board member dashboard (the main landing page for L2 users), add a Treasury card.

L2 view (board members — Kevin, Antony, Tania):

Card title: "Treasury" Contents: - Connection status indicator (green dot = live, grey = not connected) - Total balance: $XXX.XX (or "—" if not connected) - Active accounts: N - Small text: "UCCA Inc — proof of connection" (until the foundation has its own Mercury org, then this line changes) - Cache timestamp: "Updated X minutes ago"

No account numbers. No routing. No transaction detail. Just the summary.

L1 view (Tim, Jimmy):

Same card on the dashboard, plus a "View Details" link that goes to the Finance page.

6. Frontend — Finance Page (L1 Only)

Add a Finance page to the ops sidebar. Icon: DollarSign from Lucide. L1 access only — L2 users don't see this in their sidebar.

Contents:

If not connected (no token): - Setup card with instructions: "Mercury API not connected. Generate a token in Mercury → Settings → API Tokens, then set it as MERCURY_API_TOKEN on the ucco-ops Worker."

If connected:

Top: entity banner - "Connected to: UCCA Inc (proof of connection)" - "This connection will be rekeyed to UCCO Foundation when the foundation's Mercury account is opened."

Below: account cards (one per active account) - Nickname | Type | Balance | Last4 | Status pill (green Active / grey Restricted) - Balance right-aligned, monospace

Top right: Refresh button → POST /api/mercury/refresh - "Last synced: X minutes ago" label

No transaction table in this brief. That's UCCA-ops scope.

7. Ops Surface Registration

Register the Finance page in the ops sidebar and internal surface registry. This is a new page, not a stub replacement. If a finance stub already exists, replace it with this live version.


Deployment Checklist — Brief #14

  • MercuryClient class created with rekey comment block
  • D1 mercury_cache table created
  • Three API routes added and layer-gated
  • Board dashboard treasury card renders (L2 summary)
  • Finance page renders with not-connected state
  • Tim generates Mercury API token
  • Alex sets MERCURY_API_TOKEN secret on ucco-ops Worker
  • Finance page renders with live account data
  • Dashboard card shows live balance
  • Full account numbers confirmed absent from all responses
  • Refresh button works

---

BRIEF #15 — Standard Graphics Unit + Finance Page Split

SURFACE: ops.ucco.foundation (ucco-ops) — PHASE 1 (build + refine)
SURFACE: ops.ucca.online (ucca-ops) — PHASE 2 (copy + configure)
CF ACCOUNT (UCCO): aed3398a4e698767328cc3a9e698721d
CF ACCOUNT (UCCA): e5a9830215a8d88961dc6c80a8c7442a
DO NOT TOUCH: ucco.foundation, ucca.online, ir.ucca.online, keys.ucca.online, mcp.ucco.foundation, mcp.ucca.online, pioneer.ucco.foundation, rtopacks.com.au

→ TIM

Two things in this brief.

Phase 1: Standard Graphics Unit. The finance page graph works but it's dull — basic bar chart, tooltip off to the side, no interactivity. The LearnWorlds dashboard you showed me does it right: tooltip anchored to the data point, vertical crosshair guideline, smooth lines, time range pill toggles, accumulative graph switches. We can match and exceed that with a reusable component that becomes the standard across every surface.

The component is called <UCCAChart />. Alex builds it once. Every future surface that needs a graph just imports it and passes data. One look and feel everywhere. In future briefs you just say "use the Standard Graphics Unit" and it's done.

Phase 2: Finance page split. Once the graphics unit is polished on the UCCO finance page, Alex copies the entire finance page to UCCA ops. On UCCA's side, it shows all six UCCA accounts with full detail. On UCCO's side, the page gets stripped back to show only the UCCO Foundation Account (in trust) ••0538.

Sequencing: refine on UCCO first, then copy to UCCA once the look and feel is locked.


→ ALEX


PHASE 1 — Standard Graphics Unit

1. Component: <UCCAChart />

Create a reusable React chart component in the shared component library. This becomes the single charting component used across all UCCA and UCCO surfaces.

Underlying library: Chart.js

Component API:

<UCCAChart
  type="line" | "bar" | "doughnut" | "area"
  data={chartData}
  options={chartOptions}
  timeRange={true}          // Show 7D/30D/90D/YTD/All pill toggles
  datePicker={true}         // Show custom date range pickers
  accumulative={false}      // Show accumulative toggle switch
  height={300}              // Chart height in px
  loading={false}           // Show skeleton loader
  empty="No data available" // Empty state message
/>

2. Design System Integration

Colours: - Primary series: #4ecdc4 (teal/green already used in ops) - Secondary series: #f7b731 (amber/gold) - Tertiary series: #8b95a5 (muted grey) - Grid lines: rgba(255,255,255,0.06) dark mode, rgba(0,0,0,0.06) light mode - Tooltip background: #1a2332 dark / #ffffff light - Tooltip border: 1px solid rgba(255,255,255,0.12)

Typography: - Axis labels: IBM Plex Mono, 11px, muted - Tooltip title (date): IBM Plex Mono, 12px, bold - Tooltip values: IBM Plex Sans, 13px, with coloured dot indicators - Chart title: rendered OUTSIDE the chart, in page layout — not by Chart.js

3. Tooltip Behaviour (CRITICAL — main UX upgrade)

Current problem: Tooltip in fixed position off to the side, disconnected from data.

Required behaviour:

  • interaction.mode: 'index' — activates on nearest x-axis position
  • interaction.intersect: false — shows even between data points
  • Tooltip ANCHORED to nearest data point — follows cursor horizontally
  • Vertical crosshair line — dashed vertical line from data point to x-axis label
  • X-axis date label highlight — bold or background colour on hovered date
  • Tooltip shows ALL series values at that date
  • Coloured dot indicators next to each series name
  • Smooth follow — no snapping, no jumping
  • Mobile/touch: tap to show, tap elsewhere to dismiss

Crosshair plugin (if chartjs-plugin-crosshair unavailable):

const crosshairPlugin = {
  id: 'crosshair',
  afterDraw(chart) {
    if (chart.tooltip?._active?.length) {
      const x = chart.tooltip._active[0].element.x;
      const yAxis = chart.scales.y;
      const ctx = chart.ctx;
      ctx.save();
      ctx.beginPath();
      ctx.setLineDash([4, 4]);
      ctx.strokeStyle = 'rgba(255,255,255,0.3)';
      ctx.lineWidth = 1;
      ctx.moveTo(x, yAxis.top);
      ctx.lineTo(x, yAxis.bottom);
      ctx.stroke();
      ctx.restore();
    }
  }
};

4. Time Range Controls

Render OUTSIDE chart canvas, above it:

[ 7D ] [ 30D ] [ 90D ] [ YTD ] [ All ]  |  📅 start  to  📅 end
  • Active pill filled teal, others outlined
  • Default: 30D
  • Native <input type="date"> for custom range
  • Component manages state internally

5. Accumulative Toggle

Optional prop. When enabled:

ACCUMULATIVE GRAPH  [ ON 🟢 ]
  • OFF: per-period values (daily bars)
  • ON: running cumulative as line chart
  • Animated transition between modes

6. Chart Types

Line: Smooth curves (tension: 0.3), filled area 10% opacity, point markers radius 3 (5 on hover) Bar: Grouped/stacked, green inflow, coral outflow Doughnut/Gauge: Centre percentage text, configurable fill colour Area: Line with 20% fill, for accumulative views

7. States

Loading: Skeleton shimmer. No spinner. Empty: Centred muted text + icon. Error: "Unable to load chart data" + retry button.

8. Responsive

  • Fills container width, min height 200px, default 300px
  • < 640px: pills wrap, tooltip becomes full-width bottom overlay
  • X-axis labels auto-thin on narrow viewports

PHASE 2 — Finance Page Split

Do Phase 2 AFTER Phase 1 is refined and Tim approves.

9. Copy Finance Page to UCCA Ops

Replicate the entire UCCO finance page (component, API routes, cache layer) in ucca-ops.

UCCA Finance Page (ops.ucca.online): - Shows ALL six active UCCA accounts with drill-down - Full transaction views per account (click to drill down) - Daily flow chart per account using Standard Graphics Unit - Total balance across all accounts - Entity banner: "UCCA Inc — Commercial Treasury" - L1 only. L2 board view: summary card (total balance, account count, last activity) - Uses MERCURY_API_TOKEN secret on ucca-ops Worker (UCCA CF account)

API routes on ucca-ops:

GET /api/mercury/accounts       → All active accounts (L1)
GET /api/mercury/transactions   → Transactions with filters (L1)
GET /api/mercury/summary        → Aggregate summary (L1 + L2)
POST /api/mercury/refresh       → Force cache refresh (L1)

10. Strip UCCO Finance Page

After UCCA copy confirmed working:

  • UCCO shows ONLY the UCCO Foundation Account (in trust) ••0538
  • Remove all other UCCA account cards
  • Replace "proof of connection" banner with "UCCO Foundation Treasury"
  • If foundation account 404s via API (it currently does): show "Account registered but not yet accessible via API. Balance will appear when the foundation's Mercury account is activated."
  • Pending state: greyed out card, nickname + last4, "Pending API access" label

11. Account Filtering

// UCCO ops: only show foundation account
const UCCO_ACCOUNT_FILTER = ['9649260e-f3bb-11ef-a761-ab39e87b6a34'];

// UCCA ops: show all accounts
// (foundation account appears on BOTH surfaces — UCCA shows as "held in trust", UCCO shows as "our treasury")

Deployment Checklist — Brief #15

Phase 1

  • <UCCAChart /> component created
  • Tooltip anchored with vertical crosshair
  • Time range pills + date pickers
  • Accumulative toggle
  • Line, bar, doughnut types implemented
  • UCCO finance page updated to use <UCCAChart />
  • Loading/empty/error states
  • Dark mode verified
  • Tim approves look and feel

Phase 2

  • Finance page copied to ucca-ops
  • UCCA shows all 6 accounts with drill-down
  • UCCO stripped to foundation account only
  • Both pages render independently
  • Tim sets MERCURY_API_TOKEN on ucca-ops Worker

---

BRIEF #16 — MCP Compliance + Discovery Layer + Human Bridge

SURFACE: mcp.ucco.foundation (ucco-mcp) + ucco.foundation (ucco-site)
SURFACE: mcp.ucca.online (ucca-mcp) + ucca.online (ucca-site)
CF ACCOUNT (UCCO): aed3398a4e698767328cc3a9e698721d
CF ACCOUNT (UCCA): e5a9830215a8d88961dc6c80a8c7442a
DO NOT TOUCH: ops.ucco.foundation, ops.ucca.online, ir.ucca.online, keys.ucca.online, pioneer.ucco.foundation, rtopacks.com.au

→ TIM

Three parts.

Part A: Spec compliance. Our MCP servers declare protocol 2025-03-26. Current spec is 2025-11-25. We need to verify we're not breaking anything a current-spec client would expect. Checklist of 9 items for Alex to verify.

Part B: Discovery layer. When an AI agent scrapes ucco.foundation or ucca.online, nothing tells it an MCP server exists. We're implementing three layers of discovery: .well-known endpoints (for MCP clients and registry crawlers), HTTP Link headers (for any agent reading response headers), and HTML <link> tags (for any agent parsing page source). When MCP auto-discovery ships — and it will — we're already there.

Part C: Human bridge. No AI auto-discovers MCP today. So we make the human the bridge. A small "MCP Enabled" badge on both sites that opens an explainer overlay telling people what MCP is, why it matters, and giving them a one-click copy button to connect their agent.


→ ALEX


PART A — Spec Compliance Checklist

Verify the following on BOTH mcp.ucco.foundation AND mcp.ucca.online:

  • 1. Transport — Confirm we use Streamable HTTP (single POST /mcp), not legacy HTTP+SSE (separate GET /sse + POST /messages)
  • 2. JSON-RPC 2.0 — Requests: POST, Content-Type: application/json, body has jsonrpc: "2.0", method, params, id. Responses include jsonrpc: "2.0".
  • 3. Initialize handshake — Client sends initialize with protocolVersion + capabilities. Server responds with its own. Client sends notifications/initialized. Verify this sequence works.
  • 4. tools/list — Returns array of tool objects with name, description, inputSchema (valid JSON Schema). Verify all tools return valid schemas.
  • 5. tools/callname + arguments in, content array with type: "text" blocks out. Verify all tools.
  • 6. Server infoinitialize response includes serverInfo: { name, version }.
  • 7. OAuth discovery — Does /.well-known/oauth-authorization-server resolve? If yes, verify metadata. If no, note for future upgrade.
  • 8. Protocol version — Keep 2025-03-26 if that's what we implement. Don't declare newer than what we support.
  • 9. mcp.ucca.online 522 — Fix DNS routing issue. Worker is deployed but DNS/route isn't connecting.

PART B — Discovery Layer

1. .well-known/mcp/server-card.json (SEP-1649)

Deploy on: ucco.foundation AND mcp.ucco.foundation

{
  "$schema": "https://modelcontextprotocol.io/schemas/server-card/v1.0",
  "version": "1.0",
  "protocolVersion": "2025-03-26",
  "serverInfo": {
    "name": "UCCO Foundation",
    "version": "1.0.0",
    "description": "Machine-queryable interface to the Universal Capability Certification Object (UCCO) open standard. The first standards body to make itself readable by AI agents via MCP.",
    "homepage": "https://ucco.foundation"
  },
  "transport": {
    "type": "streamable-http",
    "url": "https://mcp.ucco.foundation/mcp"
  },
  "capabilities": {
    "tools": true,
    "resources": false,
    "prompts": false
  },
  "authentication": {
    "required": false,
    "methods": ["oauth2"],
    "note": "Unauthenticated access available. OAuth 2.1 with PKCE for enhanced access."
  },
  "contact": {
    "email": "admin@ucco.foundation"
  }
}

Deploy on: ucca.online AND mcp.ucca.online — same structure, substitute: - name: "UCCA" - version: "1.0.0" - description: "MCP interface to UCCA — Universal Capability Certification Authority. Cryptographic capability certification infrastructure for human and autonomous actors." - homepage: "https://ucca.online" - transport url: "https://mcp.ucca.online/mcp" - contact email: "admin@ucca.online"

2. .well-known/mcp (SEP-1960)

Deploy on: ucco.foundation AND mcp.ucco.foundation

{
  "mcp_version": "1.0",
  "server_name": "UCCO Foundation MCP Server",
  "server_version": "1.0.0",
  "endpoints": {
    "streamable_http": "https://mcp.ucco.foundation/mcp"
  },
  "capabilities": {
    "tools": true,
    "resources": false,
    "prompts": false,
    "sampling": false,
    "roots": false
  },
  "authentication": {
    "required": false,
    "methods": ["oauth2"],
    "oauth2": {
      "authorization_endpoint": "https://mcp.ucco.foundation/authorize",
      "token_endpoint": "https://mcp.ucco.foundation/token"
    }
  },
  "security": {
    "tls_required": true,
    "min_tls_version": "1.2",
    "security_contact": "admin@ucco.foundation"
  },
  "rate_limits": {
    "requests_per_minute": 60
  }
}

Deploy on: ucca.online AND mcp.ucca.online — same structure, substitute endpoints and contact for UCCA.

Add to EVERY response from ucco.foundation:

Link: <https://mcp.ucco.foundation/mcp>; rel="mcp-server"; type="application/json"

Add to EVERY response from ucca.online:

Link: <https://mcp.ucca.online/mcp>; rel="mcp-server"; type="application/json"

One line in each site Worker's response handler:

response.headers.set('Link', '<https://mcp.ucco.foundation/mcp>; rel="mcp-server"; type="application/json"');

Add to <head> of ucco.foundation:

<link rel="mcp-server" href="https://mcp.ucco.foundation/mcp" title="UCCO Foundation MCP Server" />
<link rel="mcp-server-card" href="https://ucco.foundation/.well-known/mcp/server-card.json" type="application/json" />

Add to <head> of ucca.online:

<link rel="mcp-server" href="https://mcp.ucca.online/mcp" title="UCCA MCP Server" />
<link rel="mcp-server-card" href="https://ucca.online/.well-known/mcp/server-card.json" type="application/json" />

All GitHub links on ucco.foundation currently point to admin-ucco-foundation. The org has been renamed to ucco-foundation. Find and replace all instances: - github.com/admin-ucco-foundation/github.com/ucco-foundation/ - Affects: nav link, Standard section, Participate section, footer


PART C — Human Bridge Component

6. MCP Badge

Small persistent element on every page of ucco.foundation and ucca.online.

Badge text: MCP Enabled ↓

  • IBM Plex Mono, small, muted
  • Subtle single pulse on first page load
  • Click opens explainer overlay
  • Placement: Tim to decide (header right, floating bottom-right, or inline)

7. Explainer Overlay

Fade-up modal on badge click. Max-width 640px, centred.

Content for ucco.foundation:

New to MCP? You're not alone.

The Model Context Protocol is an open standard that lets AI agents connect directly to services and query them in structured, meaningful ways. Instead of your AI reading a webpage and guessing, it gets precise, verified answers from the source.

Why this matters for you

When you ask your AI assistant about UCCO, it reads our website the same way you do — skimming text, making inferences. Our MCP server gives it direct access to structured data: the standard itself, our governance, our pioneer programme, verified credentials. Better source, better answers.

Why you have to tell your agent

AI agents don't auto-discover MCP servers yet. The protocol is new and the discovery layer is still being built. Right now, you're the bridge — you tell your agent where to connect, and it handles the rest. One line, once.

Connect your agent

Claude Desktop / Claude Code

claude mcp add ucco-foundation https://mcp.ucco.foundation/mcp
[ 📋 Copy ]

Any MCP-compatible client (Cursor, VS Code, Windsurf, Continue)

{ "mcpServers": { "ucco-foundation": { "url": "https://mcp.ucco.foundation/mcp" } } }
[ 📋 Copy ]

Works with: ChatGPT · Claude · Cursor · DeepSeek · Gemini · GitHub Copilot · Grok · Microsoft Copilot · OpenRouter · Perplexity · VS Code · Windsurf

Who manages MCP?

The Model Context Protocol is maintained by the Agentic AI Foundation under the Linux Foundation. Co-founded by Anthropic, Block, and OpenAI. Open source, open governance.

Learn more about MCP →

Content for ucca.online — same structure, substitute: - "UCCO" → "UCCA" - "ucco-foundation" → "ucca" - mcp.ucco.foundation/mcpmcp.ucca.online/mcp - "the standard itself, our governance, our pioneer programme" → "our certification infrastructure, entity details, and the relationship to the UCCO open standard"

8. Copy Button

function copyToClipboard(text, buttonElement) {
  navigator.clipboard.writeText(text).then(() => {
    buttonElement.textContent = '✓ Copied';
    setTimeout(() => { buttonElement.textContent = '📋 Copy'; }, 2000);
  });
}
  • Right-aligned on each code block
  • "✓ Copied" for 2 seconds, then reverts
  • Keyboard accessible

9. Design Specs

  • Backdrop: rgba(0,0,0,0.7)
  • Card: max-width 640px, rounded corners, matches site theme
  • Typography: IBM Plex Sans body, IBM Plex Mono code/badge
  • Close: top-right X, backdrop click, Escape key
  • Animation: 200ms fade up/down
  • Code blocks: dark bg, monospace, copy button right-aligned
  • "Works with" line: alphabetical, middot separated, no logos, no links
  • Mobile: full-width, scrollable

10. Shared Component

<MCPBadge
  entity="ucco-foundation"
  endpoint="https://mcp.ucco.foundation/mcp"
  entityName="UCCO"
  entityDescription="the standard itself, our governance, our pioneer programme, verified credentials"
/>

Same component on both sites, different props.


Deployment Checklist — Brief #16

Part A — Compliance

  • Transport type confirmed (Streamable HTTP)
  • JSON-RPC 2.0 verified
  • Initialize handshake verified
  • tools/list schemas valid
  • tools/call works all tools
  • mcp.ucca.online 522 DNS fixed

Part B — Discovery

  • .well-known/mcp/server-card.json on ucco.foundation
  • .well-known/mcp on ucco.foundation
  • .well-known/mcp/server-card.json on mcp.ucco.foundation
  • .well-known/mcp on mcp.ucco.foundation
  • Link header on ucco.foundation responses
  • <link> tags in ucco.foundation HTML head
  • Same four items on ucca.online / mcp.ucca.online
  • GitHub links fixed (admin-ucco-foundation → ucco-foundation)

Part C — Human Bridge

  • MCP badge on ucco.foundation
  • MCP badge on ucca.online
  • Overlay opens, content correct
  • Copy buttons work
  • Mobile responsive
  • Dark/light mode tested

Session 10 Briefs — 16 March 2026 Briefs #14, #15, #16 in pipeline