Skip to main content

MCP server for CosmoLex — ProfitSolv LCS /v1 Integration API (scoped OAuth)

Project description

cosmolex-mcp

Python 3.10+ License: MIT

MCP server for CosmoLex — legal practice management from Claude Desktop in natural language, over the official ProfitSolv LCS /v1 Integration API with a scoped OAuth integration.

No password login: the server authorizes once in the browser, then refreshes its own token forever. It never trips CosmoLex's single-session-per-user limit, so it won't log you out of your CosmoLex browser session while it runs.

The server exposes 86 MCP tools. The resources the LCS /v1 API does not expose are kept as fail-loud stubs — they return a clear "not in the LCS /v1 API" error rather than silently returning nothing, pending a keep/drop decision.

What you can do

The LCS /v1 Integration API covers the core practice-management entities:

  • Matters — list, get, create, update, delete
  • Clients & Contacts — full CRUD
  • Time entries & Expenses — full CRUD (log and edit billable time and costs)
  • Invoices — list, get, create, update, delete
  • Payments — list and record
  • Transactions — list (by matter or bank), get, create, update, delete
  • Documents — list (read-only)
  • Users / timekeepers — list, get
  • UTBMS codes — per matter

Not covered by the /v1 API

The /v1 Integration API is narrower than CosmoLex's internal UI (and than the NextGen /api/v2 surface a previous build used). These are not available and their tools fail loudly (rather than returning nothing): firm financial summary, timekeeper time summaries, bank/chart-of-accounts enumeration, the two-step invoice-generation flow, accounts payable, lookup/defaults endpoints, and tasks, timers, calendar, tags, trust, rates, firm roles, tax/discount, phone messages, internal chat, workflow, reports, recurring billing, matter templates, and court rules.

Requirements

  • Python 3.10+
  • Claude Desktop (or any MCP-compatible client)
  • A CosmoLex account and a registered OAuth integration (API key + OAuth client ID/secret) for the ProfitSolv LCS Integration API

Installation

pip install cosmolex-mcp

Or from source:

uv pip install -e .
# or
pip install -e .

Setup

cosmolex-mcp-setup

The wizard:

  1. Stores your integration's API key, OAuth client ID, and client secret in your OS keyring (see Credential storage below).
  2. Prints an authorization URL. Open it in your browser (logged in to CosmoLex) and click Allow.
  3. Your browser redirects to the app's registered redirect URI (https://localhost:8770/callback) with a ?code=... parameter. The browser may show a connection error — that's fine; just copy the code value from the address bar and paste it back into the wizard.
  4. The wizard exchanges the code for an access token + refresh token, cached at ~/.cosmolex-mcp/tokens.json (chmod 600).

After that, the client refreshes its own access token with the long-lived refresh token — no browser, no password — so you won't be prompted again unless the refresh token is revoked.

Verify:

cosmolex-mcp-verify

Claude Desktop Configuration

{
  "mcpServers": {
    "cosmolex": {
      "command": "cosmolex-mcp"
    }
  }
}

Credential storage

By default credentials are stored in your operating system's native secret store via the cross-platform keyring library:

OS Backend
macOS Keychain
Windows Credential Manager
Linux Secret Service (GNOME Keyring / KWallet)

Secrets are saved under the service name cosmolex-mcp. Nothing is written to disk in clear text.

File fallback. On a host with no keyring backend (e.g. a headless Linux box without Secret Service), or if you set COSMOLEX_MCP_USE_KEYRING=0, credentials fall back to a ~/.cosmolex-mcp/.env file with 0600 permissions.

Read order. Credentials resolve in the order OS keyring → process environment → .env file.

Authentication notes

The server uses the ProfitSolv LCS /v1 Integration API with a scoped OAuth integration:

  • Consent once (/OAuth/authorizeAllow) to obtain an authorization code.
  • Exchange the code at {base}/api/ext/auth/token (grant_type=authorization_code) for an access_token (~30 min) + a long-lived refresh_token.
  • Data calls go to the LCS /v1 host with two headers: X-Api-Key: <app key> and X-User-Token: <access token>.
  • Refresh (grant_type=refresh_token) renews the access token without a password login, so the user's CosmoLex browser session is never bumped.

Hosts are overridable via COSMOLEX_BASE_URL (OAuth host — sandbox sandbox.cosmolex.com, production law.cosmolex.com) and COSMOLEX_API_BASE_URL (the LCS /v1 data host — the ProfitSolv Azure app; the production data host is provisioned per-firm).

Example usage in Claude

"List my matters"

"Create a client named Acme Holdings"

"Log a time entry on matter "

"Show open invoices and recent payments"

"List the firm's users"

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cosmolex_mcp-0.2.1.tar.gz (27.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cosmolex_mcp-0.2.1-py3-none-any.whl (28.3 kB view details)

Uploaded Python 3

File details

Details for the file cosmolex_mcp-0.2.1.tar.gz.

File metadata

  • Download URL: cosmolex_mcp-0.2.1.tar.gz
  • Upload date:
  • Size: 27.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for cosmolex_mcp-0.2.1.tar.gz
Algorithm Hash digest
SHA256 347b7e4916d1a79903904bd9c463f589adef39682ff75eeab6c3c3582598b0e2
MD5 e0c288f7f2706cf0209c82062f2808f5
BLAKE2b-256 7eb81176bfabf3cc87d2b901a8b54a030d5322050c03b8b30f7e378f98ce9b23

See more details on using hashes here.

File details

Details for the file cosmolex_mcp-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: cosmolex_mcp-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 28.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for cosmolex_mcp-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 113e25c677669526c0d980dbc10a3a093a17f4e70638f50a50e113b09502a804
MD5 5d087cfe216ec33856c07c31702f0422
BLAKE2b-256 70ae61a0e1822a99576adcb4d49375342fdc3aa633ec119baf7db558aed95e06

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page