Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TenderAIAnalyze the latest RFP and generate a compliance matrix for the technical requirements."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TenderAI — MCP Server for Tender & Proposal Management
A production-ready Model Context Protocol server that automates government/enterprise tender workflows: RFP parsing, technical proposal writing, financial proposal assembly, partner coordination, and compliance tracking.
Features
18 MCP Tools across 5 domains: Document Intelligence, Technical Proposals, Financial Proposals, Partner Coordination, Past Proposal Indexing & Search
Hybrid Search: FTS5 full-text keyword search + sqlite-vec vector similarity search with Reciprocal Rank Fusion (RRF)
5 Resource URI schemes for knowledge base access: past proposals, templates, vendors, company profile, standards
4 Workflow Prompts for end-to-end orchestration: tender analysis, executive summaries, partner checks, full proposal workflow
AI-Powered: Uses Claude to parse RFPs, generate proposal sections, and produce compliance narratives
Voyage AI Embeddings (optional): Semantic search over past proposals — finds similar projects even without exact keyword matches
Document Generation: Professional DOCX proposals and XLSX BOM spreadsheets
SQLite Database: Tracks RFPs, proposals, vendors, BOM items, partners, deliverables, and indexed past proposals
OAuth 2.0: Built-in OAuth support for claude.ai integration (Dynamic Client Registration + PKCE, auto-approve)
Quick Start
Local Development (stdio)
# Clone and setup
cd tenders
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# Configure
cp .env.example .env
# Edit .env — set ANTHROPIC_API_KEY
# Run
python -m app.serverClaude Desktop / Claude Code Configuration
stdio (local):
{
"mcpServers": {
"tenderai": {
"command": "python",
"args": ["-m", "app.server"],
"cwd": "/path/to/tenders",
"env": {
"ANTHROPIC_API_KEY": "sk-ant-..."
}
}
}
}HTTP (remote — Claude Code/Desktop):
{
"mcpServers": {
"tenderai": {
"type": "http",
"url": "https://tender.yfi.ae/mcp",
"headers": {
"Authorization": "Bearer <MCP_API_KEY>"
}
}
}
}Claude.ai (OAuth 2.0):
Set OAUTH_ISSUER_URL=https://tender.yfi.ae in .env, then add https://tender.yfi.ae/mcp as an integration on claude.ai. OAuth flow completes automatically.
Production Deployment
sudo ./setup.sh tender.yfi.ae
# Edit /opt/tenderai/.env — set ANTHROPIC_API_KEY
sudo systemctl start tenderaiTools
Document Intelligence
Tool | Description |
| Parse PDF/DOCX RFP and extract structured data |
| Generate compliance matrix DOCX for an RFP |
| Check deadline and calculate milestones |
| Validate proposal has all required sections |
Technical Proposals
Tool | Description |
| Write a single proposal section with AI |
| Generate complete technical proposal DOCX |
| Generate formal architecture narrative |
| Write compliance response for a requirement |
Financial Proposals
Tool | Description |
| Parse vendor quote and extract line items |
| Build Bill of Materials from vendor quotes |
| Calculate final pricing with margins |
| Generate financial proposal DOCX + BOM XLSX |
Partner Coordination
Tool | Description |
| Draft technical requirements brief for partner |
| Generate NDA checklist for partner engagement |
| Track expected deliverable from partner |
Past Proposal Indexing & Search
Tool | Description |
| Parse + AI-summarize a past proposal folder into searchable index |
| Search indexed proposals — keyword, semantic, or hybrid mode |
| List all indexed proposals with aggregate stats |
Resources
URI Pattern | Description |
| Past proposal content |
| Proposal templates |
| Vendor profiles |
| Company profile |
| Standards references |
Prompts
Prompt | Description |
| Full tender intake and go/no-go analysis |
| Tailored executive summary generation |
| Evaluate partner fit for a tender |
| End-to-end proposal orchestration guide |
Knowledge Base
Populate these directories to improve AI-generated content:
data/
├── knowledge_base/
│ ├── company_profile/
│ │ └── profile.md # Company description, capabilities, differentiators
│ ├── templates/
│ │ ├── executive_summary.md
│ │ ├── technical_approach.md
│ │ └── ... # Section-specific templates
│ └── standards/
│ ├── iso27001.md
│ └── ... # Standards reference docs
├── past_proposals/
│ ├── tra_network_2024/
│ │ ├── Technical_Proposal.pdf # Your original submission files
│ │ ├── Cost_Sheet.xlsx # Financial data for pricing reference
│ │ └── _summary.md # Auto-generated by index_past_proposal
│ └── omantel_5g_2024/
│ └── ...
├── rfp_documents/ # Auto-populated by parse_tender_rfp
├── vendor_quotes/ # Vendor quote files
└── generated_proposals/ # Auto-populated outputSearch Architecture
Past proposals can be indexed for fast retrieval:
Upload files → index_past_proposal → AI extracts metadata → stored in SQLite
├── FTS5 (keyword search, always on)
└── sqlite-vec (vector search, optional)FTS5: BM25 keyword ranking with porter stemming — sub-millisecond search
Vector: Voyage AI embeddings (512-dim) stored in sqlite-vec — semantic similarity
Hybrid: Both combined via Reciprocal Rank Fusion (RRF) for best results
Set
VOYAGE_API_KEYin.envto enable vector search (200M free tokens from Voyage AI)
Backup
# Manual backup
./backup.sh /backups/tenderai 30
# Cron (daily at 2 AM)
0 2 * * * /opt/tenderai/backup.sh /backups/tenderai 30Architecture
app/
├── server.py # Entry point — FastMCP init and wiring
├── config.py # Settings from .env
├── tools/
│ ├── document.py # 4 document intelligence tools
│ ├── technical.py # 4 technical proposal tools
│ ├── financial.py # 4 financial proposal tools
│ ├── partners.py # 3 partner coordination tools
│ └── indexing.py # 3 past proposal indexing & search tools
├── resources/
│ └── knowledge.py # 5 resource URI handlers
├── prompts/
│ └── workflows.py # 4 workflow prompts
├── db/
│ ├── schema.sql # SQLite schema (10 tables + FTS5 + triggers)
│ ├── database.py # Async database layer + sqlite-vec + OAuth CRUD
│ └── models.py # Pydantic models
├── services/
│ ├── llm.py # Anthropic SDK wrapper (15 prompt templates)
│ ├── parser.py # PDF/DOCX/XLSX parser
│ ├── embeddings.py # Voyage AI embedding service (optional)
│ └── docwriter.py # DOCX/XLSX generator
└── middleware/
├── auth.py # ASGI Bearer token auth (Claude Code/Desktop)
└── oauth.py # OAuth 2.0 provider (claude.ai)This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.