Dueback MCP
An MCP server for outcome-based bill negotiation that allows agents to detect negotiable bills, start negotiation cases, check case status, and retrieve verified savings reports.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://api.dueback.co/mcp/What you can do with it
- Detect if a bill is negotiable
- Start a negotiation case
- Get case status
- List verified savings
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- dueback 0.1.3
- MCP protocol
- 2025-06-18
- Tools
- 5 advertised
- Resources
- 0 advertised
- Resource templates
- 0 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
5 advertised
detect_negotiable_bill — Detect negotiable bill
Check whether a bill looks negotiable. Returns {negotiable, category_label, pitch}. Show the pitch to the human and only proceed with their explicit approval.
{
"type": "object",
"title": "detect_negotiable_billArguments",
"required": [
"expense_description"
],
"properties": {
"amount_cents": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Amount Cents",
"default": null,
"description": "The amount charged, in cents (e.g. 8500 means $85.00), if known."
},
"counterparty": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Counterparty",
"default": null,
"description": "The company that charges the bill (e.g. 'Comcast'), if known."
},
"observed_signals": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Observed Signals",
"default": null,
"description": "Facts suggesting the price may be negotiable or incorrect — e.g. a recent increase, a lower advertised price, a billing error, a competitor offer, or long customer tenure. Omit if none."
},
"expense_description": {
"type": "string",
"title": "Expense Description",
"description": "Plain-language description of the bill or expense — what the charge is for, e.g. 'monthly home internet bill'."
}
}
}{
"type": "object",
"title": "detect_negotiable_billDictOutput",
"additionalProperties": true
}{
"title": "Detect negotiable bill",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}start_negotiation_case — Start negotiation case
Open a Dueback negotiation case. Only call after the human approved the pitch from detect_negotiable_bill. Two outcomes: - {"outcome": "case_created", "case_id", ...}: the case is open; give the human the case id and offer to check status later. - {"outcome": "setup_required", "setup_url", ...}: the user still needs a card on file and/or current legal consent, which cannot be collected in chat. Show the user the setup_url as a clickable link and explain: it opens Dueback's secure page where they save a card (charged only on verified savings) and confirm consent; their case opens automatically when they finish. Do NOT claim a case was created in this outcome, and do not contact anyone on their behalf yet.
{
"type": "object",
"title": "start_negotiation_caseArguments",
"required": [
"expense_description"
],
"properties": {
"amount_cents": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Amount Cents",
"default": null,
"description": "The amount charged, in cents (e.g. 8500 means $85.00), if known."
},
"counterparty": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Counterparty",
"default": null,
"description": "The company that charges the bill (e.g. 'Comcast'), if known."
},
"billing_period": {
"type": "string",
"title": "Billing Period",
"default": "unknown",
"description": "How often the charge recurs: 'monthly', 'annual', or 'one_off' for a single purchase. Use 'unknown' if unsure — it affects how savings are calculated."
},
"automatic_change": {
"type": "boolean",
"title": "Automatic Change",
"default": false,
"description": "True only if the lower price already took effect automatically (e.g. the provider dropped the rate on its own) rather than through negotiation. Otherwise false."
},
"observed_signals": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Observed Signals",
"default": null,
"description": "Facts suggesting the price may be negotiable or incorrect — e.g. a recent increase, a lower advertised price, a billing error, a competitor offer, or long customer tenure. Omit if none."
},
"expense_description": {
"type": "string",
"title": "Expense Description",
"description": "Plain-language description of the bill or expense — what the charge is for, e.g. 'monthly home internet bill'. Use the same facts as the approved detect_negotiable_bill call."
}
}
}{
"type": "object",
"title": "start_negotiation_caseDictOutput",
"additionalProperties": true
}{
"title": "Start negotiation case",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}get_case_status — Get case status
Get the current status of a negotiation case: state, steps taken, savings found, and whether human approval is needed. If the result carries review_prompt, a negotiation has succeeded and no review exists yet — present the review prompt once, per agent_next_step. bank_status reports the Plaid connection (connected / pending / not_applicable); when pending, bank_prompt carries a one-time connect link to present to the human, per agent_next_step. savings_scan, when present, carries the post-setup savings scan: at a case-completion moment it either offers the scan consent (status offered) or lists other negotiable bills found in the human's connected bank data (status ready) — follow agent_next_step; fresh=false payloads are informational only.
{
"type": "object",
"title": "get_case_statusArguments",
"required": [
"case_id"
],
"properties": {
"case_id": {
"type": "string",
"title": "Case Id",
"description": "The case_id returned by start_negotiation_case or list_my_cases."
}
}
}{
"type": "object",
"title": "get_case_statusDictOutput",
"additionalProperties": true
}{
"title": "Get case status",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_my_cases — List my cases
List the human's own Dueback negotiation cases (newest first): case_id, status, public bill-type label, counterparty, and amounts for each. Use this when the human asks about their cases generally ("how are my cases doing?") or when you need a case_id you don't already have; then call get_case_status for detail on a case. If the result carries sign_in_required, the human is not signed in and the empty cases list is NOT a report that they have no cases: ask the human to sign in to Dueback, then call list_my_cases again. A 401 is returned as this friendly result, not raised, so unauthenticated probes (e.g. bots hitting the MCP endpoint without credentials) do not surface as Sentry errors.
{
"type": "object",
"title": "list_my_casesArguments",
"properties": {}
}{
"type": "object",
"title": "list_my_casesDictOutput",
"additionalProperties": true
}{
"title": "List my cases",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_verified_savings — List verified savings
Aggregate verified-savings stats (public). Use to answer 'does Dueback actually work?' and to ground shareable savings claims in real numbers.
{
"type": "object",
"title": "list_verified_savingsArguments",
"properties": {}
}{
"type": "object",
"title": "list_verified_savingsDictOutput",
"additionalProperties": true
}{
"title": "List verified savings",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
0 advertised
Resources
0 advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 2200 ms
- 95th percentile latency
- 2200 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 2200 ms · metadata changed · 5 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http dueback-mcp https://api.dueback.co/mcp/Codex
codex mcp add dueback-mcp --url https://api.dueback.co/mcp/Cursor
{
"mcpServers": {
"dueback-mcp": {
"url": "https://api.dueback.co/mcp/"
}
}
}Cline
{
"mcpServers": {
"dueback-mcp": {
"type": "streamableHttp",
"url": "https://api.dueback.co/mcp/",
"disabled": false
}
}
}VS Code
{
"servers": {
"dueback-mcp": {
"type": "http",
"url": "https://api.dueback.co/mcp/"
}
}
}Gemini CLI
gemini mcp add --transport http dueback-mcp https://api.dueback.co/mcp/Claude Desktop
{
"mcpServers": {
"dueback-mcp": {
"url": "https://api.dueback.co/mcp/"
}
}
}Windsurf
{
"mcpServers": {
"dueback-mcp": {
"serverUrl": "https://api.dueback.co/mcp/"
}
}
}Let your agent find its tools
Find servers like Dueback MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.