MCP Server

mcp-server

com.debitura/mcp-server

What this MCP does

Submits and manages cross-border debt collection cases, contracts, partner communications, documents, tasks, and recovered payments.

create_case
Create Collection Case
Submit a debt collection case to Debitura. This is a LEGAL AND FINANCIAL ACTION: a collection partner starts recovery against the debtor, and contractual fees apply on success. Required workflow — never skip it: 1. Call preview_case first and show the user the pricing, assigned partner, and any contracts that need signing. 2. Ask the user to explicitly confirm submission. 3. Only then call this tool. NEVER call it without the user's explicit confirmation in this conversation. Submission is idempotent: the server sends a unique Idempotency-Key and safely retries transient network failures without risk of duplicate cases. A 422 response is a business rejection — read its payload (it may contain signing URLs for required contracts, or duplicate-reference details).
Destructive
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['currencyCode', 'debtor', 'date'], 'properties': {'tag': {'type': 'string', 'description': 'Optional tag for grouping test data'}, 'date': {'type': 'string', 'description': 'Invoice date (ISO 8601, e.g. 2026-03-01) — required by the API'}, 'debtor': {'type': 'object', 'required': ['type', 'name', 'address', 'city', 'countryAlpha2'], 'properties': {'city': {'type': 'string', 'description': 'City — required by the API'}, 'name': {'type': 'string', 'description': "Company name or person's full name"}, 'type': {'enum': ['Company', 'Private'], 'type': 'string', 'description': 'Company (B2B) or Private individual (B2C)'}, 'email': {'type': 'string', 'description': 'Debtor email'}, 'phone': {'type': 'string', 'description': 'Debtor phone incl. country code'}, 'address': {'type': 'string', 'description': 'Street address — required by the API'}, 'zipCode': {'type': 'string', 'description': 'Postal/ZIP code'}, 'stateAlpha2': {'type': 'string', 'description': 'US state code, e.g. "CA" — REQUIRED for United States debtors'}, 'contactPerson': {'type': 'string', 'description': 'Contact person (companies only)'}, 'countryAlpha2': {'type': 'string', 'maxLength': 2, 'minLength': 2, 'description': 'Country (ISO 3166-1 alpha-2)'}, 'companyRegistrationNumber': {'type': 'string', 'description': 'Company registration number (VAT/CVR/org number)'}}, 'description': 'The debtor the claim is against', 'additionalProperties': False}, 'isTest': {'type': 'boolean', 'description': 'Create as test data (persisted but excluded from production metrics)'}, 'dueDate': {'type': 'string', 'description': 'Case due date (ISO 8601). When omitted with claimLines, Debitura uses the oldest line due date.'}, 'comments': {'type': 'string', 'description': 'Context for the collection partner, e.g. payment history or prior communication'}, 'claimLines': {'type': 'array', 'items': {'type': 'object', 'required': ['dueDate', 'amount'], 'properties': {'amount': {'type': 'number', 'description': 'Outstanding balance after payments and credit notes', 'exclusiveMinimum': 0}, 'dueDate': {'type': 'string', 'description': 'Invoice due date (ISO 8601)'}, 'reference': {'type': 'string', 'description': 'Optional invoice reference; must be unique within the claim'}}, 'additionalProperties': False}, 'maxItems': 1000, 'minItems': 1, 'description': 'Unpaid invoices making up the claim. Use instead of amountToRecover and age buckets; Debitura derives the total and aging.'}, 'currencyCode': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': 'ISO 4217 currency code, e.g. "EUR"'}, 'amountToRecover': {'type': 'number', 'description': 'Total principal amount. Omit when sending claimLines', 'exclusiveMinimum': 0}, 'claimDescription': {'type': 'string', 'description': 'Description of the claim (what the debt is for)'}, 'assignedUserEmail': {'type': 'string', 'description': 'Email of the team member to own the case (use list_team_members to find valid team members)'}, 'creditorReference': {'type': 'string', 'maxLength': 50, 'description': 'RECOMMENDED: your own reference (e.g. invoice number). Helps avoid business duplicates and lets you look the case up later.'}, 'allowPendingContracts': {'type': 'boolean', 'description': 'Accept the case even if contracts (SDCA/POA) are unsigned — it waits in PendingContractSigning with signing URLs returned'}, 'amountToRecoverOver6Months': {'type': 'number', 'minimum': 0, 'description': 'Cumulative principal more than 180 days overdue'}, 'amountToRecoverOver12Months': {'type': 'number', 'minimum': 0, 'description': 'Cumulative principal more than 365 days overdue'}, 'amountToRecoverOver24Months': {'type': 'number', 'minimum': 0, 'description': 'Cumulative principal more than 730 days overdue'}}, 'additionalProperties': False}
get_account_summary
Get Account Summary
Return a count of cases per lifecycle stage for the creditor's account. Useful for a quick portfolio overview without listing all cases. Stages: PendingContractSigning, PendingVerificationInternal, PendingVerification, NeedsAdditionalDetails, Leads, LeadsQuoteGiven, Active, Paused, Closed, Merged. Note: these counts include the creditor's own test cases; list_cases exposes the `isTestCase` flag that marks them.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
get_case
Get Case
Fetch one collection case in full detail. Look it up by Debitura case ID (GUID), by your own creditor reference (e.g. invoice number), or by the Debitura case reference shown in the portal. Provide exactly one of the three identifiers.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'Debitura case ID (GUID)'}, 'caseReference': {'type': 'string', 'description': 'Debitura case reference as shown in the portal'}, 'creditorReference': {'type': 'string', 'description': 'Your own reference for the case (e.g. invoice number)'}}, 'additionalProperties': False}
get_case_activity
Get Case Activity
Fetch the chronological timeline of a case — what has happened so far: status changes, partner actions, communications, and payments. Returns an envelope `{ items, currentEngagementPhase }`: `items` is the chronological event list, and `currentEngagementPhase` is the case's current engagement phase ("Pre-legal", "Legal", or "Enforcement"; null when no active engagement exists).
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['caseId'], 'properties': {'caseId': {'type': 'string', 'format': 'uuid', 'description': 'Debitura case ID (GUID)'}}, 'additionalProperties': False}
get_case_contract_status
Get Case Contract Status
Check which contracts (e.g. debt collection agreement, power of attorney) are signed or still blocking a case, including signing URLs for any outstanding documents.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['caseId'], 'properties': {'caseId': {'type': 'string', 'format': 'uuid', 'description': 'Debitura case ID (GUID)'}}, 'additionalProperties': False}
get_case_messages
Get Case Messages
Read the chat conversation on a case between you and the collection partner handling it. Each message includes: senderName, role (Creditor / Partner / Managed by partner), sentAt (UTC), message. See the debitura://glossary/chat-roles resource for what each role means.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['caseId'], 'properties': {'caseId': {'type': 'string', 'format': 'uuid', 'description': 'Debitura case ID (GUID)'}}, 'additionalProperties': False}
get_case_payments
Get Case Payments
List every payment recorded on a case — money recovered so far.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['caseId'], 'properties': {'caseId': {'type': 'string', 'format': 'uuid', 'description': 'Debitura case ID (GUID)'}}, 'additionalProperties': False}
get_case_tasks
Get Case Tasks
List the open tasks (action-items) attached to one specific case — same data as list_tasks, scoped to a single case. Use this when you're already working a specific case and want just its outstanding tasks. Note: account-level tasks that aren't tied to any one case (e.g. SignContract, AssignBankAccount — these block the whole account, not one case) never appear here; use list_tasks to see those. See list_tasks for the full task model (auto-resolve, solutionUrl, action).
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['caseId'], 'properties': {'type': {'type': 'array', 'items': {'enum': ['Generic', 'ReplyToChat', 'SelectQuoteWinner', 'ReviewPartner', 'ClientInputRequired', 'SignContract', 'MoreInfoNeeded', 'AssignBankAccount', 'CaseValidationNeedsInfo'], 'type': 'string'}, 'description': 'Restrict to specific task types, e.g. ["ReplyToChat", "SignContract"]. Valid values: Generic, ReplyToChat, SelectQuoteWinner, ReviewPartner, ClientInputRequired, SignContract, MoreInfoNeeded, AssignBankAccount, CaseValidationNeedsInfo'}, 'caseId': {'type': 'string', 'format': 'uuid', 'description': 'Debitura case ID (GUID)'}, 'status': {'enum': ['Open', 'Solved'], 'type': 'string', 'description': 'Filter by task status. "Open" (default) or "Solved".'}}, 'additionalProperties': False}
list_case_files
List Case Files
List all documents attached to a case: file name, document type, description, upload date, and a time-limited SAS download URL. Each file also carries downloadUrlExpiresAt (UTC) — when the download URL stops working, so a cached URL can be refreshed in time. Use upload_case_file to attach new documents.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['caseId'], 'properties': {'caseId': {'type': 'string', 'format': 'uuid', 'description': 'Debitura case ID (GUID)'}}, 'additionalProperties': False}
list_cases
List Cases
List the creditor's debt collection cases with pagination, status filtering, and sorting. Returns compact case summaries: reference, debtor name + country, amounts, lifecycle, partner, key dates. Use get_case for full detail on a specific case. Lifecycle values (statuses filter and output): `PendingContractSigning` · `PendingVerificationInternal` · `PendingVerification` · `NeedsAdditionalDetails` · `Leads` · `LeadsQuoteGiven` · `Active` · `Paused` · `Closed` · `Merged` Sortable fields: `DateCreated` · `DateUpdated` · `DateFinished` · `DateCollectionStarted` · `DueDate` · `Date` · `GrossAmount` · `Remainder` · `InterestFees` · `CollectionFees` Sort format: `Field:asc` or `Field:desc`, e.g. `GrossAmount:desc` Note: results include the creditor's own test cases; the `isTestCase` flag on each case marks them.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'integer', 'minimum': 1, 'description': 'Page number, starting from 1 (default 1)'}, 'sort': {'type': 'string', 'description': 'Sort expression: Field:asc or Field:desc. Valid fields: DateCreated, DateUpdated, DateFinished, DateCollectionStarted, DueDate, Date, GrossAmount, Remainder, InterestFees, CollectionFees. Example: GrossAmount:desc'}, 'pageSize': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page (default 10, max 100)'}, 'statuses': {'type': 'array', 'items': {'enum': ['PendingContractSigning', 'PendingVerificationInternal', 'PendingVerification', 'NeedsAdditionalDetails', 'Leads', 'LeadsQuoteGiven', 'Active', 'Paused', 'Closed', 'Merged'], 'type': 'string'}, 'description': 'Filter by lifecycle status. Values: PendingContractSigning, PendingVerificationInternal, PendingVerification, NeedsAdditionalDetails, Leads, LeadsQuoteGiven, Active, Paused, Closed, Merged'}}, 'additionalProperties': False}
list_tasks
List Tasks
List every open task (action-item) across your whole account — things the platform needs you to do before a case (or your account) can proceed: reply to a chat, sign a contract, assign a bank account, and so on. Use get_case_tasks instead to scope this to one case. Tasks auto-resolve once the underlying condition clears — e.g. replying to a case's chat makes its ReplyToChat task disappear on its own. Treat this as a live work queue, not a log: a task seen on one call may no longer be open on the next. Every task carries a solutionUrl — an absolute link a human can open to resolve it in one click, whatever the type. Some types (today: ReplyToChat, ClientInputRequired, MoreInfoNeeded) additionally carry a non-null `action` pointing at the exact API call that resolves them — for those, call send_case_message with the task's caseId instead of sending a human to solutionUrl. Tasks without an action rely on solutionUrl alone. Task types: Generic, ReplyToChat, SelectQuoteWinner, ReviewPartner, ClientInputRequired, SignContract, MoreInfoNeeded, AssignBankAccount, CaseValidationNeedsInfo.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'integer', 'minimum': 1, 'description': 'Page number, starting from 1 (default 1)'}, 'type': {'type': 'array', 'items': {'enum': ['Generic', 'ReplyToChat', 'SelectQuoteWinner', 'ReviewPartner', 'ClientInputRequired', 'SignContract', 'MoreInfoNeeded', 'AssignBankAccount', 'CaseValidationNeedsInfo'], 'type': 'string'}, 'description': 'Restrict to specific task types, e.g. ["ReplyToChat", "SignContract"]. Valid values: Generic, ReplyToChat, SelectQuoteWinner, ReviewPartner, ClientInputRequired, SignContract, MoreInfoNeeded, AssignBankAccount, CaseValidationNeedsInfo'}, 'status': {'enum': ['Open', 'Solved'], 'type': 'string', 'description': 'Filter by task status. "Open" (default) or "Solved".'}, 'pageSize': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page (default 10, max 100)'}}, 'additionalProperties': False}
list_team_members
List Team Members
List the team members on the creditor's Debitura account. Use this to resolve a valid sender (userId or email) before calling send_case_message, or a case owner for create_case.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'integer', 'minimum': 1, 'description': 'Page number (default 1)'}, 'pageSize': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page'}}, 'additionalProperties': False}
ping
Test Connection
Verify the connection to Debitura and show which creditor account the API key belongs to. Call this first to confirm the integration is set up correctly.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
preview_case
Preview Case (Pricing & Eligibility)
Dry-run a collection case BEFORE creating it: returns eligibility, the assigned collection partner, pricing (success fee), and any contracts that would need signing. Nothing is persisted. ALWAYS call this before create_case and show the user the pricing and requirements.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['currencyCode', 'debtorType', 'debtorCountryAlpha2'], 'properties': {'dueDate': {'type': 'string', 'description': 'Invoice due date (ISO 8601) — used to compute debt age for pricing'}, 'claimLines': {'type': 'array', 'items': {'type': 'object', 'required': ['dueDate', 'amount'], 'properties': {'amount': {'type': 'number', 'description': 'Outstanding balance after payments and credit notes', 'exclusiveMinimum': 0}, 'dueDate': {'type': 'string', 'description': 'Invoice due date (ISO 8601)'}, 'reference': {'type': 'string', 'description': 'Optional invoice reference; must be unique within the claim'}}, 'additionalProperties': False}, 'maxItems': 1000, 'minItems': 1, 'description': 'Unpaid invoices making up the claim. Use instead of amountToRecover and age buckets; Debitura derives the total and aging.'}, 'debtorType': {'enum': ['Company', 'Private'], 'type': 'string', 'description': 'Company (B2B) or Private individual (B2C)'}, 'currencyCode': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': 'ISO 4217 currency code, e.g. "EUR", "USD", "DKK"'}, 'amountToRecover': {'type': 'number', 'description': 'Total principal amount. Omit when sending claimLines', 'exclusiveMinimum': 0}, 'debtorStateAlpha2': {'type': 'string', 'description': 'US state code, e.g. "CA" — REQUIRED when the debtor is in the United States'}, 'debtorCountryAlpha2': {'type': 'string', 'maxLength': 2, 'minLength': 2, 'description': 'Debtor country, ISO 3166-1 alpha-2, e.g. "DE", "US"'}, 'amountToRecoverOver6Months': {'type': 'number', 'minimum': 0, 'description': 'Cumulative principal more than 180 days overdue'}, 'amountToRecoverOver12Months': {'type': 'number', 'minimum': 0, 'description': 'Cumulative principal more than 365 days overdue'}, 'amountToRecoverOver24Months': {'type': 'number', 'minimum': 0, 'description': 'Cumulative principal more than 730 days overdue'}}, 'additionalProperties': False}
send_case_message
Send Case Message
Send a chat message on a case to the collection partner handling it. The partner is notified by email. The message is attributed to a named team member, so a sender is REQUIRED: pass the sender's userId or email from list_team_members. Ask the user who the message should be sent as if it is not obvious.
Destructive
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['caseId', 'message'], 'properties': {'caseId': {'type': 'string', 'format': 'uuid', 'description': 'Debitura case ID (GUID)'}, 'message': {'type': 'string', 'minLength': 1, 'description': 'The message to send'}, 'senderEmail': {'type': 'string', 'description': 'Team member email sending the message (alternative to senderUserId)'}, 'senderUserId': {'type': 'string', 'format': 'uuid', 'description': 'Team member ID sending the message (from list_team_members)'}}, 'additionalProperties': False}
upload_case_file
Upload Case File
Attach a document to a case (invoice copy, contract, correspondence, proof of delivery). Max 25 MB. Allowed extensions: .pdf, .xls, .xlsx, .csv, .txt, .jpg, .jpeg, .png, .gif. Provide the file content base64-encoded.
Destructive
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['caseId', 'fileName', 'contentBase64'], 'properties': {'caseId': {'type': 'string', 'format': 'uuid', 'description': 'Debitura case ID (GUID)'}, 'fileName': {'type': 'string', 'description': 'File name including extension, e.g. "invoice-1042.pdf"'}, 'contentType': {'type': 'string', 'description': 'MIME type, e.g. "application/pdf" (inferred from extension if omitted)'}, 'description': {'type': 'string', 'description': 'Short description of the document'}, 'documentType': {'enum': ['OriginalInvoice', 'DebtorDocuments', 'CreditorDocuments', 'PartnerDocuments', 'DemandLetter', 'Miscellaneous'], 'type': 'string', 'description': 'Document category (default: OriginalInvoice). Values: OriginalInvoice · DebtorDocuments · CreditorDocuments · PartnerDocuments · DemandLetter · Miscellaneous'}, 'contentBase64': {'type': 'string', 'description': 'File content, base64-encoded'}}, 'additionalProperties': False}
Added
send_case_message
Sept. 17, 2026, 12:34 p.m.
Added
upload_case_file
Sept. 17, 2026, 12:34 p.m.
Added
create_case
Sept. 17, 2026, 12:34 p.m.
Added
get_case_tasks
Sept. 17, 2026, 12:34 p.m.
Added
list_tasks
Sept. 17, 2026, 12:34 p.m.
Added
get_account_summary
Sept. 17, 2026, 12:34 p.m.
Added
list_case_files
Sept. 17, 2026, 12:34 p.m.
Added
list_team_members
Sept. 17, 2026, 12:34 p.m.
Added
preview_case
Sept. 17, 2026, 12:34 p.m.
Added
get_case_contract_status
Sept. 17, 2026, 12:34 p.m.
Added
get_case_payments
Sept. 17, 2026, 12:34 p.m.
Added
get_case_messages
Sept. 17, 2026, 12:34 p.m.
Added
get_case_activity
Sept. 17, 2026, 12:34 p.m.
Added
get_case
Sept. 17, 2026, 12:34 p.m.
Added
list_cases
Sept. 17, 2026, 12:34 p.m.
Added
ping
Sept. 17, 2026, 12:34 p.m.