内容
# 工具列表
[](LICENSE)
[](package.json)
[](https://modelcontextprotocol.io)
---
## Bulgarian Parliament MCP Server · MCP сървър за Народно събрание
**MCP сървър с 55 инструмента за достъп до публичните данни на Народното събрание** — законодателство, народни представители, парламентарен контрол, комисии, пленарни заседания, обществени поръчки и новини. Проектиран за AI агенти (OpenCode, Claude, Cursor, Codex), които искат да работят с официални парламентарни данни.
### Какво прави този сървър уникален
REST API-то на parliament.bg връща **само метаданни** (заглавия, дати, сигнатури). Този MCP сървър може да **изтегли и извлече пълния текст на законопроектите** от PDF и RTF файловете — включително мотиви, оценка на въздействието и всеки отделен параграф. Това става чрез headless браузър (Playwright), който взима сесийни cookie-та от parliament.bg, изтегля файла и извлича текста с Python/PyPDF2.
### Бърз старт (30 секунди)
```bash
git clone https://github.com/stefanatanassov/bg-parliament-mcp.git
cd bg-parliament-mcp
npm install
npx playwright install chromium # еднократно за извличане на текстове
```
### 🤖 Инсталационен prompt — дай на AI-то да го направи
**Копирай този текст и го пейстни директно в твоя AI harness (OpenCode, Claude, Cursor, Codex).** AI-то ще изпълни всички стъпки вместо теб.
```
Clone and install the Bulgarian Parliament MCP server:
1. Run:
git clone https://github.com/stefanatanassov/bg-parliament-mcp.git /tmp/bg-parliament-mcp
cd /tmp/bg-parliament-mcp && npm install
npx playwright install chromium
2. Read /tmp/bg-parliament-mcp/AGENT.md to understand the agent configuration.
3. Detect which MCP harness I am running in (OpenCode, Claude Desktop, Cursor, Windsurf, or Codex).
4. Configure this MCP server in the correct config file for my harness:
- OpenCode / Codex: add "bg-parliament" to the "mcp" section in ~/.config/opencode/opencode.json
- Claude Desktop: add "bg-parliament" to "mcpServers" in the claude_desktop_config.json
- Cursor / Windsurf: add "bg-parliament" to "mcpServers" in the project's .cursor/mcp.json
5. Also create the civic-parliament agent from AGENT.md so I can invoke it.
6. After configuration, restart the harness and verify by asking me to list available parliament tools.
7. When done, tell me "Готово — парламентът е свързан. Попитай ме нещо за законите."
```
След като AI-то приключи, попитай нещо от рода на:
> *"Колко народни представители има в 52-рото Народно събрание и кои са парламентарните групи?"*
Ако видиш отговор с реални данни (240 депутати, 6 групи), значи всичко работи.
---
### Инсталация с една команда (копирай → пейстни → готово)
След като си клонирал repo-то и си пуснал `npm install`, остава само да кажеш на твоя MCP harness къде се намира сървърът. **Това става с един JSON блок**, който добавяш в конфигурационния файл на съответния инструмент.
#### Къде да сложа конфигурацията?
| Harness | Файл за редакция | Къде се намира |
|---|---|---|
| **OpenCode** | `opencode.json` | `~/.config/opencode/opencode.json` |
| **Claude Desktop** | `claude_desktop_config.json` | `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) или `%APPDATA%\Claude\claude_desktop_config.json` (Windows) |
| **Cursor** | `mcp.json` | `.cursor/mcp.json` в корена на проекта |
| **Windsurf** | `mcp_config.json` | `~/.codeium/windsurf/mcp_config.json` |
| **Codex** | `opencode.json` | `~/.config/opencode/opencode.json` (същият като OpenCode) |
#### ⚠️ Важно: замени пътя
Във всеки пример по-долу **трябва да замениш** `/absolute/path/to/bg-parliament-mcp` с реалния път до директорията на твоята машина. За да намериш пътя:
```bash
cd bg-parliament-mcp && pwd
# Примерен изход: /Users/ivan/Code/bg-parliament-mcp
```
#### OpenCode / Codex — добави в `opencode.json`
Влез в секцията `"mcp"` и добави нов запис:
```json
{
"mcp": {
"bg-parliament": {
"type": "local",
"command": ["node", "/absolute/path/to/bg-parliament-mcp/index.js"],
"enabled": true,
"timeout": 45000
}
}
}
```
Ако файлът вече има други MCP сървъри (като `"github"`, `"playwright"` и т.н.), просто добави `"bg-parliament"` като нов ключ в същия `"mcp"` обект — **не** създавай нов `"mcp"` блок.
#### Claude Desktop — добави в `claude_desktop_config.json`
```json
{
"mcpServers": {
"bg-parliament": {
"command": "node",
"args": ["/absolute/path/to/bg-parliament-mcp/index.js"],
"env": {
"PARLIAMENT_TIMEOUT_MS": "30000",
"PARLIAMENT_RETRIES": "2"
}
}
}
}
```
#### Cursor / Windsurf — добави в `mcp.json`
```json
{
"mcpServers": {
"bg-parliament": {
"command": "node",
"args": ["/absolute/path/to/bg-parliament-mcp/index.js"]
}
}
}
```
#### Проверка, че работи
След като си добавил конфигурацията, рестартирай harness-а и попитай:
> *"Какви инструменти са достъпни от parliament MCP сървъра?"*
Ако видиш списък с 55 инструмента (започващи с `parliament_`), значи всичко е наред.
#### 🧠 Бонус: добави и agent дефиницията (flying start)
За да получиш максимална стойност веднага, **копирай съдържанието на [`AGENT.md`](AGENT.md)** като нов агент в твоя harness. Това дава на AI-то контекст как да използва правилно инструментите — да проверява факти, да кръстосва данни, да не превежда имена, да цитира източници.
- **OpenCode:** създай файл `~/.config/opencode/agents/civic-parliament.md` със съдържанието на `AGENT.md`
- **Claude Desktop:** добави съдържанието като custom system prompt
- **Cursor:** добави като `.cursorrules` или project rule
---
### Какво можеш да питаш (примери)
След като MCP сървърът е свързан, можеш да задаваш въпроси като:
- *"Анализирай законопроект 167155 — бюджетът на НЗОК за 2026. Извлечи пълния текст, обясни всеки параграф и маркирай проблемните неща за обикновените хора."*
- *"Покажи ми пълния профил на народния представител Михаела Доцова — какви закони е внасяла, в кои комисии участва, какви въпроси е задавала."*
- *"Проследи всичко, което се случва в парламента по темата 'горива' — законопроекти, въпроси, обществени поръчки."*
- *"Направи одит на обществените поръчки на парламента за последните 6 месеца — маркирай директните възлагания без конкурс."*
- *"Сравни двата законопроекта за училищно образование (167433 и 167218) — какви са разликите и какво означават за родителите."*
### Инструменти по категории
| Категория | Брой | Какво включва |
|---|---|---|
| **Законодателство** | 10 | Търсене и профили на закони, законопроекти, проекто-актове, обществени консултации |
| **Народно събрание и депутати** | 10 | Състави, сесии, структури, 240 депутата, профили, отсъствия, наказания |
| **Парламентарен контрол** | 14 | Въпроси, питания, изслушвания, блиц-контрол, разисквания, вотове на доверие/недоверие |
| **Комисии и пленарни заседания** | 13 | Информация, документи, заседания, становища, стенограми, програми |
| **Обществени поръчки** | 4 | Типове, статуси, търсене, профили |
| **Новини и пресцентър** | 4 | Заглавна страница, търсене, профили на новини, календар на живо |
### Ключови файлове в repository-то
| Файл | Описание |
|---|---|
| `README.md` | Този файл — пълна документация (BG + EN) |
| `AGENT.md` | Дефиниция на AI агент — сложи го в OpenCode/Claude/Cursor за flying start |
| `PROMPTS.md` | 20+ готови prompt-а за анализ на закони, депутати, поръчки, кръстосани разследвания |
| `index.js` | Самият MCP сървър (55 инструмента, stdio транспорт) |
| `lib/client.js` | HTTP клиент с retry логика и error handling |
| `lib/download-bill.js` | Изтегляне на PDF/RTF файлове през Playwright |
| `lib/extract-text.py` | Python скрипт за извличане на текст от PDF и RTF |
### Изисквания
- **Node.js** >= 18
- **Python 3** (само за `parliament_get_bill_text`)
- **PyPDF2** (`pip3 install PyPDF2`)
- **Playwright** (`npx playwright install chromium`)
- **Без API ключове** — API-то на parliament.bg е напълно публично
### Лиценз
MIT — свободно ползване, модифициране и разпространение. Данните са от публичното API на Народното събрание.
### 🌐 Remote сървър (за ChatGPT, Claude mobile, телефон)
Сървърът поддържа и HTTP транспорт — качи го веднъж на хостинг и го ползвай от **всяко устройство**, включително телефон.
```bash
npm run remote
# → http://localhost:3000/mcp
```
**Deploy:** Railway, Render, Hostinger, VPS — стандартно Express.js приложение. Подробни инструкции в [английската секция](#-remote-deployment-use-from-chatgpt-claude-mobile-phone) по-долу.
**Свързване от ChatGPT/Claude mobile:**
```json
{
"mcpServers": {
"bg-parliament": {
"type": "url",
"url": "https://your-host.com/mcp"
}
}
}
```
# 通过 hPanel 或 Hostinger MCP API 上传,然后触发 Node.js 构建
**选项 C:任何 VPS(DigitalOcean,Hetzner,Linode)**
```bash
ssh your-vps
git clone https://github.com/stefanatanassov/bg-parliament-mcp.git
cd bg-parliament-mcp && npm install --production
# 可选:安装 Playwright 以提取法案文本
npx playwright install chromium
# 使用 PM2 持久运行
npm install -g pm2
pm2 start remote.js --name bg-parliament
```
### 从远程 MCP 客户端连接
部署完成后,将任何远程 MCP 客户端指向 `https://your-host.com/mcp`:
```json
{
"mcpServers": {
"bg-parliament": {
"type": "url",
"url": "https://your-host.com/mcp"
}
}
}
```
这适用于 **ChatGPT 桌面版、Claude 移动版、Cursor、Windsurf** —— 任何支持远程 MCP 服务器的客户端。不需要本地 Node.js。不需要 Playwright(法案文本提取功能会优雅地降级)。
### 无 Playwright(适用于无服务器环境)
如果您的托管环境不支持无头 Chromium(无服务器环境、共享托管),法案文本提取工具会返回一条清晰的消息:
> *"法案文本提取需要 Playwright。安装方法:npx playwright install chromium"*
其他 54 种工具无需安装即可完美运行。
## 常绿提示
在 MCP 客户端中保存这些自定义提示,以便进行高价值查询:
### "MP [姓名] 最近在做什么?"
```
使用 parliament_list_mps 查找 [姓名],然后使用 parliament_get_mp_profile 获取其 ID。
检查 _raw.importActList 获取其撰写的立法,_raw.controlList 获取其提出的问题,
以及 _raw.mshipList 获取其委员会工作。总结其活动。
```
### "分析 [法案 ID] 对普通保加利亚人的影响"
```
使用 parliament_get_bill_text 获取法案。仔细阅读法律文本。
识别出变更现有法律的每个 §。对于每个变更,解释:
1. 之前的规则是什么?
2. 新文本说什么?
3. 谁受益,谁损失?
4. 提供一个具体的实践例子。
```
### "跟踪议会中的某个话题"
```
话题:[话题]。使用 parliament_search_legislative_acts、parliament_search_bills、
parliament_search_questions 和 parliament_search_enquiries,关键词为 [话题]。
交叉引用结果:哪些 MPs 参与了该话题?哪些委员会处理它?是否有相关的采购合同?建立时间线。
```
### "审计 [话题] 周围的采购"
```
使用 parliament_list_procurement_types 和 parliament_list_procurement_statuses
了解代码。然后使用 parliament_search_procurements,关键词为 [话题]。
对于每个结果,使用 parliament_get_procurement 获取详细信息。标记:
- 单一投标人合同
- "Договаряне без обявление"(直接授予,类型 5)
- 具有可疑短截止日期的合同
```
### "比较 MPs 在 [问题] 上的投票"
```
使用 parliament_list_mps 确定议会团体。对于每个团体,
搜索该团体 MPs 关于 [问题] 的问题和询问。
比较:哪些团体提出问题,哪些团体提出立法?
反对党的问题是否得到回答?是否有避免审查的模式?
```
---
## 项目结构
```
bg-parliament-mcp/
├── index.js # MCP 服务器(55 种工具,stdio 传输)
├── package.json
├── lib/
│ ├── client.js # ParliamentClient — HTTP 抽象 + 重试
│ ├── download-bill.js # 基于 Playwright 的法案文件下载器
│ └── extract-text.py # Python PDF/RTF 文本提取脚本
├── tests/
│ └── unit.test.js # 11 个单元测试(模拟 HTTP)
├── AGENT.md # MCP 主机的通用代理定义
├── PROMPTS.md # 精选的高价值提示
├── README.md # 本文件
└── LICENSE # MIT
```
---
## 要求
- **Node.js** >= 18
- **Python 3** (用于 PDF/RTF 提取 — 仅需用于 `parliament_get_bill_text`)
- **PyPDF2** (`pip3 install PyPDF2` — 仅需用于 PDF 提取)
- **Playwright** (`npx playwright install chromium` — 仅需用于法案文本提取)
- 无 API 密钥,无身份验证 — 议会 API 完全公开
---
## 设计原则
- **严格只读** — 所有工具均为 GET 或 POST 搜索;零修改
- **仅使用官方数据** — 每个响应均来源于 `parliament.bg`
- **保留保加利亚语文本** — 本层不进行翻译;名称、标题、法律保持原始保加利亚语
- **稳定模式** — 规范的字段名称、规范的 URL、原始数据回退
- **优雅降级** — 扫描的 PDF 返回清晰的错误;空结果返回 `[]`;HTTP 错误结构化
---
## 测试
```bash
npm test # 11 个单元测试(无需网络)
```
---
## 许可证
MIT — 自由使用、修改和分发。数据来源于保加利亚议会公共 API。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器