联系MCP服务器
MCP服务器,用于查询和管理PostgreSQL和Oracle数据库中的联系人、事务和活动。
特性
- 多数据库支持:PostgreSQL和Oracle(通过数据库链接)
- 联系人管理:查询联系人和联系方式
- 交易查询:在主事务表和归档事务表中搜索
- 活动创建:创建活动并重新排队交易
- 护栏:内置安全限制和数据编辑
建筑
┌─────────────────────────────────────────────────────────────┐
│ MCP Server │
├─────────────────────────────────────────────────────────────┤
│ Tools: select_records, select_transactions, │
│ select_contact, create_campaign, │
│ create_campaign_from_query, ... │
├─────────────────────────────────────────────────────────────┤
│ Database Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ PostgreSQL │ │ Oracle │ │ Oracle DB Links │ │
│ │ (contacts) │ │ (config) │ │ (tx/dw databases) │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘数据模型:
client桌子→ hasclient_id,dialing_db,reporting_dbskill桌子→ linksclient_id到skill_id(一个客户→ 许多技能)transaction桌子→CLIENT_ID列实际上是skill_id(传统命名)campaign桌子→ 两者都有client_id和skill_id
设置
python3 -m venv .venv
source .venv/bin/activate
pip install -e .配置
创建一个 .env 包含以下变量的文件:
PostgreSQL(用于联系人)
PGHOST=your-host
PGPORT=5432
PGDATABASE=your-db
PGUSER=your-user
PGPASSWORD=your-password
PGSSLMODE=requireOracle(用于配置、事务、活动)
ORACLE_HOST=your-oracle-host
ORACLE_PORT=1521
ORACLE_SERVICE=your-service
ORACLE_USER=your-user
ORACLE_PASSWORD=your-password可选的
ORACLE_DSN=full-dsn-string # Overrides host/service/port
ORACLE_CLIENT_TABLE=lvousr.client # Default client table
TX_ARCHIVE_COUNT=2 # Number of archive tables to scan (0-2)跑
source .venv/bin/activate
set -a && source .env && set +a
contact-mcpMCP客户端配置
VS代码(.vscode/mcp.json)
{
"servers": {
"contact": {
"command": "bash",
"args": ["-c", "cd /path/to/contact && source .venv/bin/activate && contact-mcp"],
"envFile": "${workspaceFolder}/.env"
}
}
}克劳德桌面
{
"mcpServers": {
"contact": {
"command": "/bin/bash",
"args": [
"-lc",
"cd /path/to/contact && source .venv/bin/activate && set -a && source .env && set +a && contact-mcp"
]
}
}
}工具
查询工具
| 工具 | 说明 |
|---|---|
select_records(table, filters, columns, limit, offset, order_by) | 查询允许的表(联系人、contact_details) |
count_records(table, filters) | 统计表中的记录 |
get_contact_with_details(lvaccount_id) | 通过ID获取所有详细信息 |
select_contacts_with_details(...) | 使用详细信息加入联系人 |
select_transactions(client_id, filters, columns, limit, order_by) | 跨主表+归档表查询事务 |
select_contact(client_id, filters, columns, limit, order_by) | 通过Oracle数据库链接查询联系人 |
select_campaigns(filters, columns, limit, order_by) | 从配置数据库查询活动 |
活动工具
| 工具 | 说明 |
|---|---|
create_campaign(client_id, data) | 创建新活动 |
create_campaign_from_query(client_id, query_filters, campaign_data) | 创建活动并插入匹配的交易 |
筛选器语法
过滤器支持多种运算符:
# Simple equality
{"outcome": "FAILED"}
# Operators via list [operator, value]
{"date_modified": [">=", "2026-02-17"]}
{"total_amount": [">", 1000]}
# Operators via dict
{"outcome": {"op": "in", "value": ["FAILED", "NO_ANSWER"]}}
# Supported operators:
# =, !=, >, >=, =", "2026-02-18"]}护栏
服务器包括内置的安全限制:
查询限制
MAX_ROWS:10000(每次查询的最大行数)DEFAULT_LIMIT: 100MAX_OFFSET: 100,000POSTGRES_TIMEOUT_MS: 30,000ORACLE_TIMEOUT_SECONDS: 30MAX_IN_VALUES:1000(in子句中的值)MAX_FILTERS: 20
允许的操作
- 选择:
contact,contact_details,campaign - 插入:
campaign,transaction(通过create_campaign_rom_query) - 已屏蔽:删除、更新、删除、截断、更改、创建、授予、撤销
数据消减
敏感列会自动编辑: ssn, dob, password, password_hash, api_key, secret, token
数据库类型检测
服务器根据数据库链接命名自动检测Oracle与PostgreSQL:
lv*stg4a*→ 甲骨文lv*stg4b*→ PostgreSQL
发展
运行测试
pytest tests/检查语法
python3 -m py_compile contact_mcp/*.py备注
- 跨主表+归档表查询事务(可通过以下方式配置
TX_ARCHIVE_COUNT) - 活动始终插入Oracle配置数据库中(不通过数据库链接)
- 事务插入(用于重新排队)通过数据库链接转到拨号数据库
