Bankruptcy Observer — MCP
Public documentation for the Bankruptcy Observer Model Context Protocol server. It provides agent-first access to US business bankruptcy filings, dockets, court documents, case summaries, and monitoring workflows.
Website: bankruptcyobserver.com
MCP docs: mcp.bankruptcyobserver.com/docs
Subscribe: mcp.bankruptcyobserver.com/subscribe
Laravel controller: Laravel13/app/Http/Controllers/BKO/BkoMcpController.php
MCP endpoint
| Transport | Streamable HTTP (JSON-RPC 2.0 over HTTPS) |
| URL | https://mcp.bankruptcyobserver.com/mcp |
| Auth | Optional — free tier works without credentials; paid tools require a subscriber MCP token |
| Server name | bko-mcp |
| Version | 1.5.0 |
Send a standard MCP session: initialize → notifications/initialized (optional) → tools/list → tools/call.
Authentication
- Invalid
Authorization: Bearertoken: HTTP 401 andWWW-Authenticate: Bearer resource_metadata="https://mcp.bankruptcyobserver.com/.well-known/oauth-protected-resource", error="invalid_token". - No bearer token: free lookups stay HTTP 200. A paid tool returns a sign-in-required tool result, not an HTTP 401. A bad
X-API-Keyor URL token follows that same path. - Free tier (no auth): Limited lookups for exact debtor name (no
*wildcard) and 7-digit case numbers. - Subscriber (auth required for full data): Pass your MCP API token via:
Authorization: Bearer <api_token>X-API-Key: <api_token>(optionally withX-Client-Email)- OAuth Bearer token from the shared MCP OAuth flow (
/oauth/token) - URL token (header-less clients, e.g. Grok web connectors):
- Query:
https://mcp.bankruptcyobserver.com/mcp?api_key=YOUR_TOKEN - Path:
https://mcp.bankruptcyobserver.com/mcp/t/YOUR_TOKEN - Prefer headers/OAuth when available; treat the full URL as a secret.
- Query:
Website subscribers get MCP access included. Tokens are visible in the subscriber dashboard at /subscriber/mcp-setup. New users can also call list_plans_tool and purchase_plan_tool without auth to start Stripe checkout.
OAuth sign-in on Bankruptcy Observer accepts the account email and password, then an Allow / Deny step. ?mode=token still accepts a pasted API token in one step, which is what existing Claude and ChatGPT clients use. TrollerBk stays on the token paste. redirect_uri must exactly match a URI registered for that client. Dynamic registration rejects a non-https URI, and a Google host that is not an official oauth-redirect prefix with an /r/ or /a/ path.
Google clients keep the same refresh token and receive a new access token; the refresh expiry slides about 180 days. Other clients still rotate the refresh token. Revoking a refresh token also revokes its access token.
EIN lookup, case-number lookup, and docket lookup read the stored record. They do not take live_update. Court refresh is refresh_docket_tool and get_case_status_tool. get_document_cost_tool is preview only and does not take accept_charge or download. Those flags remain on get_document_tool. check_subscription_tool takes no arguments.
Domain verification is GET or HEAD https://mcp.bankruptcyobserver.com/.well-known/google-connected-apps. Privacy: bankruptcyobserver.com/privacy. Terms: bankruptcyobserver.com/legal.
Subscription tiers
| Tier | Access |
|---|---|
| Anonymous | Free-shape lookups only (exact name, 7-digit case number) |
| Single-Case Agent | Case tools scoped to monitored cases on your BKO account |
| Full Access Agent | All search tools plus full case/docket/document access |
Tools
Free / lookup tools
search_bankruptcy_cases_tool
Search US business bankruptcy cases by debtor name.
| Parameter | Type | Description |
|---|---|---|
search_term |
string | Debtor name (prefix or *contains for paid wildcard search) |
limit |
integer | Max results (1–100); default 25 |
skip |
integer | Pagination offset |
court |
string | Court name as returned on a case, for example Delaware or Texas Southern |
court_state |
string | Two-letter state to filter court name |
Free: exact/prefix match without *. Paid: *term contains search and full fields.
get_case_by_case_number_tool
Look up case(s) by short case number (e.g. 26-10543).
| Parameter | Type | Required | Description |
|---|---|---|---|
short_case_number |
string | yes | Short case number |
court |
string | no | Court name as returned on a case, for example Delaware |
court_state |
string | no | Two-letter state |
Free: 7-digit format returns limited fields across all courts. Paid: full data and court filters. This lookup does not contact the court.
Paid search tools (Full Access Agent)
get_case_by_ein_tool
Look up cases by debtor EIN.
| Parameter | Type | Required | Description |
|---|---|---|---|
debtor_ein |
string | yes | Employer Identification Number |
include_last_filing |
boolean | no | Include lastFilingDate from docket |
get_cases_by_industry_tool
Cases by industry label or key (Hotels, Retail, real-estate, etc.).
| Parameter | Type | Required | Description |
|---|---|---|---|
industry |
string | yes | Industry label or key |
limit |
integer | no | Max results |
start_date |
string | no | YYYY-MM-DD |
end_date |
string | no | YYYY-MM-DD |
get_cases_by_naics_tool
Cases by NAICS code (2–4 digits).
| Parameter | Type | Required | Description |
|---|---|---|---|
naics |
string | yes | NAICS code |
limit |
integer | no | Max results |
start_date |
string | no | YYYY-MM-DD |
end_date |
string | no | YYYY-MM-DD |
get_cases_by_state_tool
Cases by debtor state.
| Parameter | Type | Required | Description |
|---|---|---|---|
state |
string | yes | Two-letter state |
limit |
integer | no | Max results |
start_date |
string | no | YYYY-MM-DD |
end_date |
string | no | YYYY-MM-DD |
get_cases_by_date_range_tool
Cases filed in a date range on dateFiled. Omitting both dates defaults to yesterday.
| Parameter | Type | Description |
|---|---|---|
start_date |
string | YYYY-MM-DD |
end_date |
string | YYYY-MM-DD |
limit |
integer | Max results |
Case intelligence tools (subscribers)
get_docket_entries_tool
Docket entries for a case, ordered by itemNumber ascending. Each entry includes the full PACER itemText (never sliced). The response identifies the case by simpleName and each filing by itemNumber. It does not include caseId or docketId. limit is capped at 50; use skip (or offset, or 1-based page) to walk past the first block. Optional item_number or item_from/item_to fetch specific entries. docket_id is accepted only as an input filter when the caller already has one. A page may contain fewer than limit entries so every caption stays complete for MCP clients. The response includes total, skip, limit, returned, and has_more.
| Parameter | Type | Description |
|---|---|---|
simple_name |
string | Case simpleName (preferred). simpleName is accepted as an alias |
case_number |
string | Short or full case number |
short_case_number |
string | Alias for case_number |
court |
string | Court name as returned on a case, for example Delaware |
court_state |
string | Two-letter state to disambiguate |
docket_id |
string | Optional input filter for one entry the caller already knows. Not returned |
item_number |
integer | Return only this docket item number (full itemText) |
item_from |
integer | Filter to itemNumber >= this value |
item_to |
integer | Filter to itemNumber <= this value |
limit |
integer | Max entries (default 25, max 50). Captions are never cut; a page may return fewer when text is long |
skip |
integer | Number of entries to skip (default 0). Example: limit=50, skip=50 returns items 51–100 |
offset |
integer | Alias for skip |
page |
integer | 1-based page; equivalent to skip=(page-1)*limit. Ignored if skip or offset is set |
list_monitored_cases_tool
List cases on your BankruptcyObserver.com monitoring list. No parameters.
add_monitored_case_tool
Add a case to your monitoring list (hourly court checks, daily docket updates).
| Parameter | Type | Description |
|---|---|---|
simple_name |
string | Case simpleName |
case_number |
string | 7-digit short case number alternative |
court |
string | Court name as returned on a case, for example Delaware |
court_state |
string | Two-letter state to disambiguate |
get_case_status_tool
Refresh one case from the court case summary and return the dates the court has on file. This calls the court, so use it for one case at a time. Single Case plan: monitored cases only.
The response identifies the case by simpleName and includes name, chapter, and dates. dates contains only the fields that have a value:
| Date field | Meaning |
|---|---|
dateFiled |
Date filed |
dateLastFiling |
Date of the latest filing |
dateConverted |
Date the case converted |
datePlanConfirmed |
Date the plan was confirmed |
dateDischarged |
Debtor discharge date |
dateDischargedJoint |
Joint debtor discharge date |
dateDismissed |
Debtor dismissal date |
dateDismissedJoint |
Joint debtor dismissal date |
dateTerminated |
Date terminated |
dateClosed |
Date closed |
dateUpdated |
When this summary was saved |
Each date is YYYY-MM-DD. dateUpdated is the calendar date the summary was saved.
| Parameter | Type | Description |
|---|---|---|
simple_name |
string | Case simpleName. simpleName is accepted as an alias |
case_number |
string | 7-digit short case number |
court |
string | Court name as returned on a case, for example Delaware |
court_state |
string | Two-letter state |
refresh_docket_tool
Request an immediate docket refresh from court sources.
| Parameter | Type | Description |
|---|---|---|
simple_name |
string | Case simpleName |
case_number |
string | 7-digit short case number |
court |
string | Court name as returned on a case, for example Delaware |
court_state |
string | Two-letter state |
get_recent_developments_tool
Docket entries since a date (default: last 7 days) for one monitored case or all monitored cases.
| Parameter | Type | Description |
|---|---|---|
simple_name |
string | Optional; omit for all monitored cases |
since_date |
string | YYYY-MM-DD; default 7 days ago |
limit |
integer | Max entries (default 100, max 250) |
Document tools (subscribers)
Recommended flow:
get_docket_entries_tool→simpleNameanditemNumberget_document_toolwithsimple_nameanditem_number→ cost preview- User confirms → the same arguments plus
accept_charge: true→ signed PDF URL
get_document_cost_tool
Preview cost to download a court filing PDF. Does not pull or charge.
get_document_tool
Court filing PDF. Omit accept_charge/download for preview; set accept_charge: true or download: true after user confirms.
get_document_cost_tool accepts simple_name, item_number, and docket_id only. accept_charge and download belong on get_document_tool.
| Parameter | Type | Description |
|---|---|---|
simple_name |
string | Case simpleName. Use with item_number |
item_number |
integer | Docket item number. Use with simple_name |
docket_id |
string | Optional, when the caller already has a docket entry id. Responses still identify the filing by simpleName and item_number |
accept_charge |
boolean | get_document_tool only. true after the user approves the cost |
download |
boolean | get_document_tool only. Alias for accept_charge: true |
Note:
get_document_costis a dispatch alias ofget_document_cost_toolbut is filtered out oftools/listto avoid duplicate catalog entries.
Meta / account tools
list_plans_tool
List available BKO subscription plans with pricing and agent tiers. No auth required.
purchase_plan_tool
Get a Stripe checkout URL for a plan. No auth required.
| Parameter | Type | Required | Description |
|---|---|---|---|
plan_id |
string | yes | Plan ID or Stripe price ID from list_plans_tool |
email |
string | no | Email to prefill on checkout |
check_subscription_tool
Check the signed-in subscriber plan and remaining quota. No parameters. A missing bearer token returns a sign-in-required tool result.
MCP Registry
Listed (or publishable) in the official MCP Registry as com.bankruptcyobserver/mcp.
- Registry manifest:
server.json - Search:
https://registry.modelcontextprotocol.io/v0.1/servers?search=com.bankruptcyobserver
Example: Cursor / IDE config
Free tier (no headers):
{
"mcpServers": {
"bankruptcy-observer": {
"type": "streamableHttp",
"url": "https://mcp.bankruptcyobserver.com/mcp"
}
}
}
Subscriber:
{
"mcpServers": {
"bankruptcy-observer": {
"type": "streamableHttp",
"url": "https://mcp.bankruptcyobserver.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_BKO_MCP_TOKEN"
}
}
}
}
License and data
Bankruptcy data is aggregated from public court records. Access and use are subject to Bankruptcy Observer terms of service and subscriber agreements.