← Custos/MCP Server Documentation

Custos MCP Server

Custos exposes a small, tightly-scoped Model Context Protocol server so that AI assistants (Claude, ChatGPT, Cursor, and other MCP-capable clients) can act on behalf of a signed-in Custos user. The server exposes three tools — a static service overview, a boolean plan-status summary, and a consultation request. It never exposes document contents, asset values, or beneficiary details.

Endpoint

MCP endpointhttps://custos-confide-nobis.lovable.app/mcp
TransportStreamable HTTP (MCP 2025-06-18)
AuthOAuth 2.1 + Dynamic Client Registration
Resource metadatahttps://custos-confide-nobis.lovable.app/.well-known/oauth-protected-resource
Consent screen/.lovable/oauth/consent
Sign-in/auth (email/password + Google)

Connecting a client

Point any MCP client at the endpoint above. The client will discover the authorization server via the RFC 9728 protected-resource metadata document, register itself dynamically, and walk the user through Custos sign-in and the consent screen. No secret needs to be provisioned out-of-band.

POST https://custos-confide-nobis.lovable.app/mcp
Content-Type: application/json
Accept: application/json, text/event-stream
Authorization: Bearer <access_token>

{ "jsonrpc": "2.0", "id": 0, "method": "tools/list" }

Tools

get_service_overviewCustos service overviewOAuth required

Static, read-only summary of what Custos offers: wills, funeral plans, asset registration, and digital legacy management.

Input schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Output schema (structuredContent)

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "strapline": {
      "type": "string"
    },
    "services": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "title",
          "description"
        ]
      }
    }
  },
  "required": [
    "name",
    "strapline",
    "services"
  ]
}

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_service_overview",
    "arguments": {}
  }
}

Example response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{ …overview JSON… }"
      }
    ],
    "structuredContent": {
      "name": "Custos",
      "strapline": "Confide Nobis — the operating system for the moment of death.",
      "services": [
        {
          "key": "wills",
          "title": "Wills",
          "description": "…"
        },
        {
          "key": "funeral_plans",
          "title": "Funeral plans",
          "description": "…"
        },
        {
          "key": "asset_register",
          "title": "Asset registration",
          "description": "…"
        },
        {
          "key": "digital_legacy",
          "title": "Digital legacy",
          "description": "…"
        }
      ]
    }
  }
}
get_my_plan_statusMy plan statusOAuth required

Boolean summary for the signed-in user of which parts of their Custos plan are set up. Contains no document contents, no asset values, no beneficiary details.

Input schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Output schema (structuredContent)

{
  "type": "object",
  "properties": {
    "has_will": {
      "type": "boolean"
    },
    "has_funeral_plan": {
      "type": "boolean"
    },
    "has_asset_register": {
      "type": "boolean"
    },
    "has_digital_legacy": {
      "type": "boolean"
    },
    "updated_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    }
  },
  "required": [
    "has_will",
    "has_funeral_plan",
    "has_asset_register",
    "has_digital_legacy"
  ]
}

Example request

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_my_plan_status",
    "arguments": {}
  }
}

Example response

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{ …status JSON… }"
      }
    ],
    "structuredContent": {
      "has_will": true,
      "has_funeral_plan": false,
      "has_asset_register": false,
      "has_digital_legacy": false,
      "updated_at": "2026-06-01T12:34:56.000Z"
    }
  }
}
request_consultationRequest a consultationOAuth required

Submit a consultation / enquiry request to the Custos team on behalf of the signed-in user.

Input schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Full name."
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "Contact email."
    },
    "phone": {
      "type": "string",
      "description": "Optional phone number."
    },
    "topic": {
      "type": "string",
      "minLength": 1,
      "description": "e.g. 'will', 'funeral plan', 'estate transfer', 'digital legacy'."
    },
    "notes": {
      "type": "string",
      "description": "Optional free-text notes."
    }
  },
  "required": [
    "name",
    "email",
    "topic"
  ],
  "additionalProperties": false
}

Output schema (structuredContent)

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "created_at": {
      "type": "string",
      "format": "date-time"
    }
  },
  "required": [
    "id",
    "created_at"
  ]
}

Example request

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "request_consultation",
    "arguments": {
      "name": "Ada Lovelace",
      "email": "ada@example.com",
      "topic": "will",
      "notes": "Would like to discuss setting up a mirror will with my partner."
    }
  }
}

Example response

{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Consultation request received. Reference: 8f3c…"
      }
    ],
    "structuredContent": {
      "id": "8f3c1a52-9d0a-4a4f-9c1a-1b2c3d4e5f60",
      "created_at": "2026-06-01T12:34:56.000Z"
    }
  }
}

Data Custos will never expose

  • Will contents, drafts, or clauses.
  • Asset registers, account balances, or valuations.
  • Beneficiary identities or bequest details.
  • Any other user's data — RLS scopes every read to the signed-in caller.
  • Administrative surfaces of any kind.