Skip to main content
Glama
Beste-Oztunc

Payment-Risk-Exception-AI-Agent-MCP

by Beste-Oztunc
README.md
# Payment-Risk-Exception-AI-Agent

A local application example that demonstrates a hybrid payment-decisioning workflow. A rule based deterministic decision policy first assesess transactions and automatically approves or denies. The transactions that have mismatched info but not severe enough to trigger a denial is routed to an LLM agent which reviews the transactions then approves/denies or sends for human-review.

This example uses the following:

- Stripe's official Python SDK (`stripe-python`)
- Stripe's official mock server (`stripe-mock`)
- Rule based deterministic decision policy
- Simulated Merchant Data
- LLM Agent
- MCP Server with discoverable tools
- FastAPI REST endpoints
- SQLite
- Docker
- Postman API testing
- Analyst dashboard

## The four demo transactions

1. Everything matches
2. Travel mismatch
3. Compounding risk
4. Mixed evidence


## LLM Agent MCP flow

For exception transactions, the model itself selects the tools:

```text
LLM
  └─ calls get_transaction_context through MCP
       └─ receives Stripe + merchant context and deterministic signals
  └─ then calls exactly one MCP terminal tool:
       ├─ record_ai_decision (approve or deny)
       └─ create_human_review
```

The Python orchestrator executes the tool calls requested by the model. It does not silently replace the model with a deterministic fallback and does not choose the terminal MCP action on the model's behalf.

## Setup

For testing, please create an .env file and provide the LLM key. 

Run:

```bash
docker compose up --build
```

Open:

- Dashboard: `http://localhost:8000`
- Health/API configuration: `http://localhost:8000/api/health`
- FastAPI docs: `http://localhost:8000/docs`
- MCP endpoint: `http://localhost:8001/mcp`
- Stripe Mock: `http://localhost:12111`


## Important boundaries

- Stripe Mock returns fixture-based Stripe objects. It does not process money, run Stripe risk models, or preserve a real payment lifecycle.
- Merchant session and account data are simulated demo data.
- Clean transactions stay on deterministic policy; the model is called only for exceptions.
- The MCP server allows context retrieval, AI decision persistence, and human-review creation.
- Human-review resolution is intentionally absent from MCP. Only the analyst REST/dashboard path can resolve it.

## Screenshots:

## Main Screen:
![Main Screen](/img/2.png)


## Rules Fired:
![Rules Fired](/img/2.png)

## AI Explanation:
![AI Explanation](/img/3.png)

## Transaction Details:
![Transaction Details](/img/4.png)

## Video Preview:

https://github.com/user-attachments/assets/84ff0226-a9cb-4c60-a4f7-ed301f0b5f5d