A Claude Code plugin that automates participation in Bulgarian public procurement via the ЦАИС ЕОП portal.
Scans open tenders, downloads and analyzes documentation, calculates price-per-area metrics, generates pricing proposals, and produces ready-to-submit offer documents — all from within Claude Code.
Via skills.sh:
npx skills add Lutherwaves/eopowersVia Claude Code plugin system:
/plugin marketplace add Lutherwaves/eopowers
/plugin install eopowers@eopowersThen:
/init # Set up domain + company profile (one-time)
/start # Main menu| Skill | Purpose |
|---|---|
start |
Main menu — pick your next action |
init |
One-time company profile setup from your website + manual input |
eop-scan |
Scan eop.bg for open tenders, categorize by type, prioritize by ROI |
eop-analyze |
Download tender docs, extract requirements, produce structured analysis |
eop-price |
Batch or detailed pricing — cost estimation, market research, unit price analyses |
eop-generate |
Generate offer documents from template + company data + pricing |
eop-review |
Final compliance check before submission |
/eop-scan → Find relevant tenders
/eop-analyze → Analyze tender documentation
/eop-price → Build pricing proposal
/eop-generate → Generate offer documents
/eop-review → Review and finalize
eopowers ships with a construction domain preset but supports any procurement domain.
During /init, choose a preset or build a custom domain configuration.
Presets available:
- Construction — СМР, thermal insulation, energy efficiency, facades, renovation
Want to add a domain preset? See domains/README.md and submit a PR.
- Multi-keyword search — eop.bg uses AND for multiple keywords, so the scanner now runs separate searches per keyword and merges results automatically
- Regional buyer filtering — groups tenders by municipality, surfacing local opportunities first
- Export ZIP downloads — uses eop.bg's bulk export instead of downloading files one by one, with Windows path normalization
- Batch pricing mode (now default) — estimates costs per section with a uniform multiplier instead of position-by-position Q&A
- Unit price analyses (П1-П5) — generates
price-analyses.xlsxwith Bulgarian construction formula breakdowns - Fuzzy template matching — handles DOCX templates with variable-length dots and empty fields
- Visual PDF fallback — reads scanned documents (e.g. energy certificates) using multimodal AI when text extraction fails
- Region auto-detection —
/initdetects your region from company address and pre-populates nearby municipalities
The scanner is the most developed skill. It:
- Filters by CPV codes and keywords (positive and negative, configured per domain)
- Multi-keyword search — runs separate searches per keyword and deduplicates (eop.bg treats multiple keywords as AND, not OR)
- Regional grouping — matches buyer names against configured municipalities, showing local tenders first
- Downloads and parses tender attachments (ZIP, RAR, DOC, DOCX, PDF) to extract domain-specific metrics
- Export ZIP — downloads the full tender package in one shot with automatic Windows path normalization
- Visual PDF fallback — reads scanned documents when text extraction returns empty
- Calculates cost ratios (e.g. EUR/m² for construction), flagging tenders below feasibility thresholds
- Categorizes tenders using domain-defined taxonomy
- Ranks by ROI using value, competency match, time buffer, complexity, and competition factors
- Auto-saves scan results to
./eopowers/offers/scan-YYYY-MM-DD.md
| Dependency | Why |
|---|---|
| Playwright MCP plugin | Browser automation for eop.bg |
| python-docx | Read/write Word documents |
| openpyxl | Read/write Excel files (КСС) |
| LibreOffice | Convert .doc to .docx |
unrar |
Extract RAR archives |
pdftotext (poppler-utils) |
PDF text extraction fallback |
Install on Ubuntu/Debian:
sudo apt install libreoffice unrar poppler-utils
pip install python-docx openpyxl pdfplumberAll user-facing text is in Bulgarian — this tool automates participation in Bulgarian public procurement.
- No company data is baked into the plugin —
initgenerates a localcompany-profile.md - Domain-specific logic (keywords, metrics, pricing) lives in
domain.md, not hardcoded in skills - All working data lives in
./eopowers/in your workspace (offers, profiles, drafts) app.eop.bg/today/*is a public registry — no authentication needed for reading/downloading
.claude-plugin/ # Plugin + marketplace manifests
hooks/ # SessionStart hook
skills/ # 7 skills (start, init, eop-scan, eop-analyze, eop-price, eop-generate, eop-review)
agents/ # 2 subagent prompts (offer-analyzer, market-researcher)
domains/ # Domain presets (construction.md, ...)
PRs welcome. The plugin is prompt-based — skills are in skills/*/SKILL.md, agents in agents/*.md.
If you work in Bulgarian construction and want to improve keyword matching, area extraction patterns, or add new tender categories, contributions are especially appreciated.
MIT