mcp-open-tender-rfp-finder
LocalAbout mcp-open-tender-rfp-finder
An MCP server for finding open public tenders and RFPs in official UK, EU, and Canadian notice sources. It supports keyword, code, country, deadline, and value filters, returning structured notice details for procurement research.
Key features
- 01Search four official tender sources
- 02Filter by keywords, CPV codes, and countries
- 03Keep only notices with open deadlines
- 04Filter by publication window and value
- 05Return notice and buyer details
Use cases
- 01Find current public tenders by sector
- 02Compare deadlines for notices in selected countries
- 03Identify procurement opportunities above a value threshold
MCP support
Exposes the find_open_tenders tool to MCP clients. It starts an Apify actor run and returns the resulting dataset rows.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @mambalabsdev/mcp-open-tender-rfp-finderAPIFY_TOKENSecretApify API token from https://console.apify.com/account/integrationsLocal servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
1Saved tool list · updated 1w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| portals | array | No | Portals to read. Default all four. |
| keywords | array | No | Words or phrases to find in the notice title or description, any case. A notice matches any of them. EU TED matches over the full notice text in every language. Empty: every open notice in the window. Up to 25. |
| only_new | enum | No | Skip notices an earlier run with the same state_key returned. Default false.true | false |
| countries | array | No | Two letter buyer country codes, for example GB, DE, CA. A portal that covers none of them is skipped. |
| min_value | string | No | Drop notices valued below this number, in the notice currency. Notices with no value are kept. |
| only_open | enum | No | Drop notices whose deadline has passed. Default true.true | false |
| state_key | string | No | Names the seen list for only_new. |
| max_notices | string | No | Notice rows per run, newest first, up to 5000. Each notice row is billed. Default 100. |
| cpv_prefixes | array | No | Keep notices with a CPV code that starts with one of these, for example 72 or 48000000. CanadaBuys uses UNSPSC codes, so a CPV filter leaves it out. |
| max_charge_usd | string | No | Optional. The run stops before any row that would take its charges over this amount. |
| exclude_keywords | array | No | Drop a notice whose title or description contains any of these. |
| published_within_days | string | No | Publication window in days, 1 to 90, today included. Default 14. |
Details
From the project READMEOpen Tender and RFP Finder MCP Server
An MCP server for the Mamba Labs Open Tender and RFP Finder actor on Apify. Give it keywords, CPV codes, or buyer countries. Each run reads four official public notice portals and returns one row per open tender or RFP notice.
What's Inside
- What it does
- Quick start
- Prerequisites
- Example prompts
- Tool
- Inputs
- Pricing
- Your keys
- Full actor documentation
- License
What it does
The actor reads UK Contracts Finder, UK Find a Tender, EU TED (Tenders Electronic Daily), and the CanadaBuys open tender file, all official open data with no key. It keeps the notices that match your keywords and filters and returns one flat row per notice: buyer, buyer country, publication day, response deadline, days to deadline, estimated value and currency, CPV or UNSPSC codes, contract type, procedure, the buyer contact email the notice publishes, and a link. Filtered notices are never billed, and when nothing matches one free row says why.
All of the work runs on Apify. This package is a thin client that starts the actor run, waits for it, and hands back the dataset rows.
Quick start
You need Node.js 18 or newer and an Apify account with an API token.
Add this to your Claude Desktop config (claude_desktop_config.json), Cursor, or any MCP client:
{
"mcpServers": {
"mamba-open-tender-rfp-finder": {
"command": "npx",
"args": [
"-y",
"@mambalabsdev/mcp-open-tender-rfp-finder"
],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}
Restart the client. The find_open_tenders tool appears.
Prerequisites
- Node.js 18 or newer.
- An Apify API token from console.apify.com/account/integrations, set as
APIFY_TOKEN. The server lists its tool without a token; a call needs one.
Example prompts
- "Find open UK and Irish public tenders for software published this week."
- "Which German and Dutch public bodies are buying IT services worth more than 100,000 EUR right now?"
- "List open CanadaBuys RFPs for marketing services with their deadlines."
Tool
find_open_tenders. One tool. Example arguments:
{
"keywords": [
"software"
],
"countries": [
"GB"
],
"published_within_days": "7"
}
Inputs
Every buyer facing input of the actor, unchanged. Omitted inputs take the actor's own defaults. Numbers and booleans are sent as strings.
| Input | Type | Description |
|---|---|---|
keywords | array | Words or phrases to find in the notice title or description, any case. A notice matches any of them. EU TED matches over the full notice text in every language. Empty: every open notice in the window. Up to 25. |
exclude_keywords | array | Drop a notice whose title or description contains any of these. |
cpv_prefixes | array | Keep notices with a CPV code that starts with one of these, for example 72 or 48000000. CanadaBuys uses UNSPSC codes, so a CPV filter leaves it out. |
countries | array | Two letter buyer country codes, for example GB, DE, CA. A portal that covers none of them is skipped. |
portals | array | Portals to read. Default all four. |
published_within_days | string | Publication window in days, 1 to 90, today included. Default 14. |
only_open | string | Drop notices whose deadline has passed. Default true. |
min_value | string | Drop notices valued below this number, in the notice currency. Notices with no value are kept. |
max_notices | string | Notice rows per run, newest first, up to 5000. Each notice row is billed. Default 100. |
only_new | string | Skip notices an earlier run with the same state_key returned. Default false. |
state_key | string | Names the seen list for only_new. |
max_charge_usd | string | Optional. The run stops before any row that would take its charges over this amount. |
Pricing
Pay per event on Apify, billed to your Apify account. Prices in USD.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
notice-row, per notice row | $0.003 | $0.00285 | $0.0027 | $0.00255 |
apify-actor-start, per run start | $0.002 | $0.002 | $0.002 | $0.002 |
The no results row and notices skipped by only_new are free.
Your keys
The actor needs no key. Every portal is an official open data API or file, read directly, and the actor holds no key of any kind. Mamba Labs pays the platform and proxy costs of the run.
Full actor documentation
apify.com/mambalabs/open-tender-rfp-finder
License
MIT. See LICENSE.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.