Skip to main content
Glama
alejamorenovallejo

VISA Dispute Advisor

README.md
# VISA Dispute Advisor

A merchant dispute advisory system powered by the **VISA Dispute Management Guidelines**.

Given a dispute case, the system retrieves the applicable VISA conditions,
reasons over the merchant's response options and past dispute history, and
returns a structured recommendation.

Deployed as a **Model Context Protocol (MCP) server** — any MCP-compatible
client (GitHub Copilot, Claude Desktop, etc.) connects and drives the
reasoning loop using the two provided tools.

---

## Architecture

```
MCP Client (GitHub Copilot / Claude Desktop / …)
  │  calls tools over MCP stdio transport
  ▼
FastMCP Server
  ├─► ChromaDB  (sentence-transformers embeddings — local, no API key)
  │     semantic search over VISA Dispute Management Guidelines PDF chunks
  └─► SQLite    (SQLAlchemy)
        merchant dispute history warehouse
```

No LLM runs server-side. The server is a pure retrieval layer.

---

## Tools

| Tool | Purpose |
| --- | --- |
| `search_visa_rules` | Semantic search over VISA Guidelines — start here |
| `query_warehouse` | Merchant dispute history lookup by merchant ID |

---

## Prerequisites

* [uv](https://docs.astral.sh/uv/) ≥ 0.5
* Python ≥ 3.11
* `data/merchants-dispute-management-guidelines.pdf` — your copy of the VISA Dispute Management Guidelines PDF

---

## Setup

```bash
# 1. Clone
git clone https://github.com/alejamorenovallejo/visa-dispute-advisor.git
cd visa-dispute-advisor

# 2. Install dependencies
uv sync

# 3. Configure paths (defaults work out-of-the-box)
cp .env.example .env

# 4. Place VISA PDF in the data/ folder
# Download from: https://myanmar.visa.com/content/dam/VCOM/global/support-legal/documents/merchants-dispute-management-guidelines.pdf
# Save it as: data/merchants-dispute-management-guidelines.pdf

# 5. Ingest VISA rules into vector store
uv run python -m visa_dispute_advisor.ingest

# 6. Seed demo merchant dispute history
uv run python scripts/seed_merchants.py
```

---

## Running the server

```bash
# stdio transport — for MCP clients
uv run visa-advisor

# HTTP transport with browser inspector — for development
uv run fastmcp dev src/visa_dispute_advisor/server.py
```

---

## Connecting a client

### GitHub Copilot (VS Code)

Create `.vscode/mcp.json`:

```json
{
  "servers": {
    "visa-dispute-advisor": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "visa-advisor"],
      "cwd": "${workspaceFolder}"
    }
  }
}
```

### Claude Desktop

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "visa-dispute-advisor": {
      "command": "uv",
      "args": ["run", "visa-advisor"],
      "cwd": "/absolute/path/to/visa-dispute-advisor"
    }
  }
}
```

---

## Typical advisory session

```
Dispute case:
  Merchant ID: MER-001 (Tech Store Guatemala)
  Cardholder claim: Item not received. Ordered a laptop online on
  2026-03-01, expected delivery 2026-03-10. Tracking shows "delivered"
  but customer denies receiving it. Amount: $450.00.
  Merchant response: Has carrier tracking proof showing delivery to
  the billing address.

Agent calls:
  1. search_visa_rules("customer claims item not received, merchant has tracking proof")
  2. query_warehouse("MER-001")

Recommendation: REJECT DISPUTE (favor merchant)
  Applicable rule: Condition 13.1 — Merchandise/Services Not Received.
  Merchant can provide tracking documentation proving delivery to the
  agreed address. Under Condition 13.1, this constitutes valid compelling
  evidence to dispute the chargeback.

  Merchant risk profile: LOW RISK — 2 of 3 prior disputes resolved in
  merchant's favor. No pattern of fraudulent behavior detected.

  Next steps:
  1. Request signed proof of delivery from carrier.
  2. Submit tracking number and delivery confirmation to acquirer.
  3. If cardholder insists, escalate to Visa arbitration.
```

---

## Development

```bash
uv run ruff check --fix src/
uv run ruff format src/
uv run pytest
```

See [AGENTS.md](AGENTS.md) for full contributor and agent guidance.

---

## License

MIT

TDQS

A3.9/5.0

Scored across 2 tools

Disambiguation5/5

The two tools serve completely distinct purposes: one searches Visa dispute rules, the other retrieves merchant dispute history. There is no overlap or ambiguity.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern in snake_case: 'search_visa_rules' and 'query_warehouse'. The naming is predictable and uniform.

Tool Count2/5

With only 2 tools, the server feels under-scoped for a 'VISA Dispute Advisor'. One would expect additional tools for creating, updating, or resolving disputes to make it useful.

Completeness2/5

The tool set lacks core dispute management capabilities like creating a dispute, updating status, or listing disputes. Only rule search and merchant history are provided, leaving significant gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues