Credit Risk Copilot

Credit Risk Copilot

A natural-language interface to a credit risk database, with SQL guardrails that enforce read-only, allowlisted access to tables and columns.

Category
访问服务器

README

Credit Risk Copilot

A natural-language interface to a credit risk database. A user asks a question in English. The service returns a validated answer, a chart, and the SQL it ran.

The point of the project is not the SQL generation. The point is the boundary that decides which SQL is allowed to run.

Status

Scaffolded 2026-08-05. No agent yet. No database yet. The preflight check runs.

Requirements

Need Version State on this machine
Python 3.12 installed
Docker Desktop any current installed
Terraform 1.x not installed
AWS CLI v2 not installed

Use Python 3.12, not 3.13. The 3.13 interpreter is ahead of the ML ecosystem, and a package that ships compiled wheels can lag the interpreter by a year.

How to run it

  1. Create the virtual environment:
    py -3.12 -m venv .venv
    
  2. Activate it:
    .venv\Scripts\activate.bat
    
    Use the .bat file. PowerShell blocks Activate.ps1 under the default execution policy.
  3. Copy the example environment file:
    copy .env.local.example .env.local
    
  4. Open .env.local and set DEEPSEEK_API_KEY.
  5. Run the preflight check:
    py -3.12 -m app.doctor
    
    The check imports only the standard library, so it runs before step 6.
  6. Install the dependencies:
    pip install -r requirements.txt
    

Environment variables

.env.local holds every secret. The file is gitignored. Never commit it. If a key reaches a commit, rotate the key, because removal of the commit does not undo the exposure.

Variable Required Purpose
DEEPSEEK_API_KEY yes, for DeepSeek The API key
DEEPSEEK_MODEL no Defaults to deepseek-v4-flash
LLM_PROVIDER no deepseek or ollama. Defaults to deepseek
OLLAMA_BASE_URL no The local fallback. Needs no key
DATABASE_URL yes The Postgres connection string
LANGSMITH_API_KEY no Tracing. The app runs without it

The model names changed. DeepSeek retired deepseek-chat and deepseek-reasoner on 2026-07-24. Calls to those names no longer route anywhere. Use deepseek-v4-flash or deepseek-v4-pro. Both app/doctor.py and app/llm/client.py refuse a retired name and say why.

The architecture rule

app/guardrails/sql_check.py runs on the tool side of the MCP boundary. The agent never calls it.

The agent writes SQL. The MCP tool owns the database connection. The tool validates the SQL before it executes anything. This order matters: a check inside the agent's own code path is skipped by any input that redirects the agent, so such a check is a suggestion and not a control.

The full reasoning is in brain/decisions/2026-08-05-sql-guardrails-live-behind-the-mcp-boundary.md.

What the guardrail refuses

Rule Reason
Anything except one SELECT A write reaches the database only through a migration
A table absent from the allowlist A new table is denied by default, not allowed by oversight
A column absent from the allowlist Column-level control, not table-level
SELECT * The caller must name the columns it needs
A missing or oversized LIMIT One question cannot return the whole table

Layout

app\
  doctor.py          preflight check, standard library only
  llm\client.py      one factory for DeepSeek and Ollama
  guardrails\        SQL validation, called by the tool, never by the agent

Cost

deepseek-v4-flash costs $0.14 per million input tokens on a cache miss. A cache hit costs $0.0028 per million, which is a 98% discount.

The schema prompt is identical on every call. Put the schema at the front of the prompt and never reorder it, so every call after the first is a cache hit.

Related notes

  • brain/projects/credit-risk-copilot.md - status, open questions, and the log
  • brain/decisions/2026-08-05-sql-guardrails-live-behind-the-mcp-boundary.md
  • brain/decisions/2026-08-05-python-for-credit-risk-copilot.md

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选