Dueback

io.github.dunrossmai-rgbPublished by GitHub account dunrossmai-rgbv0.1.3Updated Nov 1, 2026

Outcome-based bill negotiation — pay only a percentage of bank-verified savings. Free to try.

VerifiedStreamable HTTPWeb executableFinanceBusiness & Commerce

Overview

AI-generated overview

Dueback lets an assistant check whether a bill is negotiable, open a bill-negotiation case with the user's consent, and track case status and verified savings.

What you can do
  • Check whether a bill or expense looks negotiable and get a pitch to show the user
  • Open a negotiation case after the user explicitly approves, or hand back a setup link
  • Look up a case's status, steps taken, savings found and any pending approval or bank-connection prompt
  • List the user's own cases with status, counterparty and amounts
  • Read aggregate public statistics on verified savings
When to use it
Useful when a user wants help lowering a bill, fee, subscription or purchase and is willing to have a third-party service negotiate on their behalf and verify savings against bank data. Also handy for checking the status of existing Dueback cases.
Requirements
Remote Streamable HTTP endpoint at api.dueback.co; OAuth 2.1 with dynamic client registration for capable clients, or a Dueback API key sent as a Bearer token. A local Python stdio wrapper exists and takes DUEBACK_API_KEY (optional DUEBACK_API_BASE). Detection works without credentials.
Before you install
Starting a case authorizes Dueback to negotiate with the provider and to connect the user's bank through Plaid, and begins a paid service: 15% of verified first-year savings on recurring bills, 10% on one-offs, capped at $200 or $1,000. Card entry and bank sign-in happen on Dueback's own pages, not through MCP. The API key must be kept secret and never committed. Detection calls are logged in aggregate for demand statistics.

Installation

In SourceWeft

  1. Open Dueback in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.dunrossmai-rgb%2Fdueback-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "dueback": {
      "type": "http",
      "url": "https://api.dueback.co/mcp/"
    }
  }
}

README

Dueback MCP Server

[mcptry]

Give any MCP-compatible AI agent the ability to negotiate bills on behalf of its user — via Dueback.

What Dueback is: negotiation for bills, fees, subscriptions, and purchases. Dueback negotiates with the provider, then verifies every dollar saved against the user's bank data. Free to try — the user pays only a share of verified savings. If there's no verified saving, the user pays $0.

Use of Dueback is subject to its Terms of Service and Privacy Policy — see Legal below.

Connect to the remote server

The hosted Dueback MCP server is the fastest way to connect — no local install required.

  • Endpoint: https://api.dueback.co/mcp/
  • Transport: Streamable HTTP
  • Auth: OAuth 2.1 with dynamic client registration. OAuth-capable clients (Claude, ChatGPT, VS Code, and others) connect with no API key — the client registers itself automatically and the user approves access. An API key (below) also works for clients that require one.

Example client configuration:

json
{  "mcpServers": {    "dueback": {      "url": "https://api.dueback.co/mcp/"    }  }}

One-click install:

[Install in VS Code] [Install in Cursor]

Prefer to run a local server over stdio? See Local (stdio) server below.

Verify in 60 seconds

No install and no API key needed — the detection tool is keyless. These two calls exercise the live server end to end:

bash
# 1. Initialize a sessioncurl -s https://api.dueback.co/mcp/ \  -H 'Content-Type: application/json' \  -H 'Accept: application/json, text/event-stream' \  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"smoke-test","version":"1.0"}}}'
# 2. Call the keyless detection toolcurl -s https://api.dueback.co/mcp/ \  -H 'Content-Type: application/json' \  -H 'Accept: application/json, text/event-stream' \  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"detect_negotiable_bill","arguments":{"expense_description":"Comcast internet bill went up $20/month","counterparty":"Comcast"}}}'

Responses stream as SSE data: lines. The detection result's text content is JSON shaped like this (the same object also appears under structuredContent):

json
{  "negotiable": true,  "category_label": "internet bill",  "pitch": "This looks like an internet bill we can negotiate. Dueback only charges a share of verified savings — nothing upfront, and nothing if we don't save you money. Want me to open a case?",  "agent_next_step": "The human has not approved yet. Show the pitch and ask whether to proceed. ..."}

Tools

The remote server exposes five tools:

ToolAuthWhat it does
detect_negotiable_billnoneCheck if a bill/situation is negotiable
list_verified_savingsnoneLook up savings Dueback has verified
start_negotiation_caseOAuth or API keyStart a negotiation case (human consent required)
get_case_statusOAuth or API keyCheck a case's status and recorded savings
list_my_casesOAuth or API keyList your own negotiation cases and their statuses

Get an API key (self-serve)

OAuth-capable clients don't need a key at all (see above). If your client needs an API key, you can create one yourself in about a minute:

  1. Go to dueback.co/#api-key ("Get your API key").
  2. Enter your email and click Email me a sign-in link. You'll receive a one-time sign-in link by email.
  3. Open the link in the email to confirm your address.
  4. Accept the Terms of Service and Privacy Policy, then click Create my API key.
  5. Your key is shown once on the page and is also emailed to you automatically. Save it somewhere safe.

Then pass it to your MCP client as a Bearer token for https://api.dueback.co, or set it as DUEBACK_API_KEY for the local stdio server (below). Never share the key or commit it to a repo.

Questions, or a signup that gets stuck? Email [email protected].

Pricing

  • Free to try. You pay only on verified savings.
  • Recurring bills/subscriptions: 15% of verified first-year savings
  • One-off purchases/fees: 10% of the verified saving
  • Caps: $200 everyday / $1,000 big-ticket
  • No verified saving → $0

Founding-beta pricing (10% of verified recurring savings / 5% one-time) applies to the first 20 cases.

Required user-consent flow

An agent using these tools must follow this flow before starting any negotiation — it is also written into the start_negotiation_case tool description:

  1. Detect first. Call detect_negotiable_bill and share the result.
  2. Pitch Dueback plainly. Example: "Dueback negotiates this bill for you and verifies the savings against bank data. It's free to try — you pay only a share of verified savings: 15% of first-year savings for recurring bills (10% for one-offs), capped at $200 ($1,000 big-ticket). No verified saving means $0."
  3. Ask explicitly. "Should I start the negotiation?" Proceed only on a clear yes. Silence or vagueness means no.

Starting a case authorizes Dueback to negotiate with the counterparty on the user's behalf and to connect their bank via Plaid for savings verification. Never start cases speculatively or in the background.

Local (stdio) server

This repo also includes a thin stdio wrapper (server.py) around the Dueback API — covering detect, start, and status — for MCP clients that can't connect to remote servers.

bash
git clone https://github.com/dunrossmai-rgb/dueback-mcp.gitcd dueback-mcppython -m venv .venv && .venv/bin/pip install -r requirements.txtDUEBACK_API_KEY=dbk_your_key_here .venv/bin/python server.py

Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

json
{  "mcpServers": {    "dueback": {      "command": "/path/to/dueback-mcp/.venv/bin/python",      "args": ["/path/to/dueback-mcp/server.py"],      "env": {        "DUEBACK_API_KEY": "dbk_your_key_here"      }    }  }}

Omit DUEBACK_API_KEY to run detection-only. Optionally set DUEBACK_API_BASE to point at a non-production API.

Privacy

  • Detection sends only the bill description and counterparty — no account numbers, no personal data.
  • Case creation sends the expense details needed to negotiate.
  • Bank connection (Plaid) happens in Dueback's own flow, never through MCP.
  • The API key is sent only as a Bearer token to https://api.dueback.co and never logged.

What data goes where

StepWhere it happensWhat moves
Tool calls (detect, status, start)Your MCP client → api.dueback.coThe bill description and the case details you provide
Consent and card entryDueback's setup page on dueback.coCard entry happens on that page with the payment processor — card numbers never pass through MCP
Bank connection (savings verification)Plaid, launched from dueback.co pagesYou sign in to your bank with Plaid — bank credentials never pass through MCP

Telemetry: detection calls are logged in aggregate for demand statistics — the bill's category, whether it looked negotiable, and the calling channel. Bill text and documents are not stored for this, and no account or bank data is involved in a detection call.

Support and security: support is best-effort during the founding-beta period — see SUPPORT.md. Security vulnerabilities are reported privately per SECURITY.md, never as public issues.

Legal

Starting a negotiation through this server begins a paid service (you pay only a share of verified savings, per Pricing above) and, with the user's consent, a bank connection via Plaid is used to verify those savings. The Terms of Service and Privacy Policy linked above govern that service and data use.

Source: README.md at commit ba5da21

Tools

5

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.

Parametersamount_centscounterpartyobserved_signalsexpense_descriptionrequired

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.

Parametersamount_centscounterpartybilling_periodautomatic_changeobserved_signalsexpense_descriptionrequired

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.

Parameterscase_idrequired

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.

Takes no parameters.

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.

Takes no parameters.

Version history

4
  1. v0.1.3LatestNov 1, 2026
  2. v0.1.2Oct 25, 2026
  3. v0.1.1Oct 22, 2026
  4. v0.1.0Oct 21, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts