Skip to main content
Glama
Qualia MCP

Qualia MCP

by sanjibani

Qualia MCP

MCP server for the Qualia title and escrow platform -- talk to your orders, messages, and documents from Claude, Cursor, or any MCP client. First MCP in the title & escrow vertical.

What you can do with it

You:   "List orders awaiting closing and group by status."
Claude: *calls list_orders, summarises by status*

You:   "Send the buyer an update on the closing timeline for ORD-12345."
Claude: *calls send_message with subject + body, confirms the result*

You:   "What documents are attached to order ORD-98765?"
Claude: *calls list_documents, returns the file list*

Related MCP server: cursor-mcp-server

Why this exists

Qualia is the leading digital closing platform for the title & escrow industry. Their public Qualia API exposes a read-write GraphQL surface for placing orders, exchanging messages and documents, and pulling analytics -- but there was no MCP wrapper until now. Title & escrow shops run on tight margins and the manual data-entry tax is high; this MCP lets an AI agent drive Qualia the same way a human would.

Other title & escrow platforms (SoftPro, RamQuest, Resware) have no MCP either. This one targets Qualia specifically because it has the largest market share, a public GraphQL API, and a vendor partner program (partners@qualia.com).

Install

pip install -e .

Configure

export QUALIA_USERNAME="your-org-id"
export QUALIA_API_KEY="your-secret-key"

Capability gates must be enabled on your organization for the tools you need. Contact partners@qualia.com to request access. Write tools (send_message) will fail with CAPABILITY_GATE_MISSING until the gate is enabled.

Use with Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "qualia": {
      "command": "qualia_mcp",
      "env": {
        "QUALIA_USERNAME": "your-org-id",
        "QUALIA_API_KEY": "your-secret-key"
      }
    }
  }
}

Use with Claude Code

claude mcp add qualia -- qualia_mcp \
  --env QUALIA_USERNAME=your-org-id --env QUALIA_API_KEY=your-secret-key

Tools

Tool

Type

Capability gate

What it does

health_check

Diagnostic

none

Verifies credentials + GraphQL connectivity

get_organization

Read

organization:read

Returns the authenticated org (id, name, displayName)

list_orders

Read

orders:read

Paginated title orders with optional status filter

get_order

Read

orders:read

Single order detail (status, property address, timestamps)

list_messages

Read

messages:read

Messages on a title order (subject, body, author)

send_message

Write

messages:write

Post a new message on a title order

list_documents

Read

documents:read

Documents attached to a title order

Engineering notes

  • GraphQL + typed errors. Qualia returns 200 OK with an errors[] array on GraphQL validation failures. We promote those to typed exceptions (QualiaAuthError for CAPABILITY_GATE_MISSING / UNAUTHENTICATED, QualiaNotFoundError for NOT_FOUND, QualiaRateLimitError for RATE_LIMITED, generic QualiaGraphQLError otherwise) so agents can branch on cause instead of message text.

  • isError-compliance. Every tool raises on failure (instead of returning the error as a string). FastMCP's wire-level isError=true flag is only set when a tool raises, so the agent can distinguish failure from success.

  • JSONL audit logging. Every tool call writes a structured record to stderr (or a file path via QUALIA_AUDIT_LOG) for SOC2 auditability. Secret fields (api_key, password, token, etc.) are auto-redacted.

  • Retry with backoff. Transient 5xx and 429 responses retry up to 3 times with exponential backoff + full jitter, honoring Retry-After.

Development

pip install -e ".[dev]"
ruff check src tests
ruff format --check src tests
mypy src
pytest

License

MIT.

See also

Available Tools

7 tools
get_orderA

Return a single title order by id (status, property address, timestamps).

Use when: "look up order ORD-12345" or "what's the status of this closing?". Args: order_id: the Qualia order id (e.g. "ord_abc123"). Requires: orders:read capability gate.

Inputs: order_id (required). Returns: result

get_organizationA

Return the authenticated Qualia organization (id, name, display name).

Use when: "what's my Qualia org id?" or "verify the org I'm authenticated as". Requires: organization:read capability gate.

Inputs: no named parameters. Returns: result

health_checkA

Verify credentials work. If this fails, all other tools will too.

Inputs: no named parameters. Returns: result

list_documentsA

List documents attached to a title order (name, mime, size, created).

Use when: "what documents are on this order?" or "did the buyer upload the LOI yet?". Args: order_id: the Qualia order id. limit: page size (default 25, max 100). Requires: documents:read capability gate.

Inputs: order_id (required), limit. Returns: result

list_messagesA

List messages on a title order (most recent first).

Use when: "what's the latest message on this order?" or "show all messages from the buyer side". Args: order_id: the Qualia order id. limit: page size (default 25, max 100). Requires: messages:read capability gate.

Inputs: order_id (required), limit. Returns: result

list_ordersA

List title orders for the authenticated organization.

Use when: "show me the last 10 orders" or "list orders awaiting closing". Args: limit: page size (default 25, max 100). offset: skip N orders for pagination. status: optional filter -- e.g. "OPEN", "CLOSED", "CANCELLED". Requires: orders:read capability gate.

Inputs: limit, offset, status. Returns: result

send_messageA

Post a message on a title order.

Use when: "send the buyer an update on the closing timeline" or "ask escrow to verify the wire instructions". Args: order_id: the Qualia order id. subject: short subject line (1-200 chars). body: message text (1-10000 chars). Plain text or basic markdown. Requires: messages:write capability gate.

Inputs: body (required), subject (required), order_id (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 7 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: order retrieval, organization info, health check, document listing, message listing, order listing, and message sending. No overlapping functionalities.

    Naming Consistency4/5

    Most tools follow a verb_noun pattern (get_order, list_orders, send_message). 'health_check' is an exception but it's a common idiom. Overall consistent and predictable.

    Tool Count5/5

    With 7 tools, the set is well-scoped for a title order management API. Each tool covers a necessary function without bloat or deficiency.

    Completeness4/5

    Covers essential read operations and message sending. Missing CRUD operations for orders (create, update) but the domain focus appears to be monitoring and communication, so minor gap.

    Related MCP Connectors

    Related MCP Servers