Skip to main content
Glama
tendfeed-eu

tendfeed-mcp

Official
README.md
<div align="center">

<img src="tendfeed-icon-512.png" alt="TendFeed" width="120" />

# TendFeed — Bid/No-Bid Intelligence MCP Server

**Should you bid? Every open EU tender, scored against 592,000 real award outcomes.**

**Language:** [**English**](README.md) · [Deutsch](docs/de-DE/README.md)

[![smithery badge](https://smithery.ai/badge/mlaun-kosb/tendfeed)](https://smithery.ai/server/mlaun-kosb/tendfeed)
[![MCP Registry](https://img.shields.io/badge/MCP%20Registry-eu.tendfeed%2Ftendfeed-blue)](https://tendfeed.eu/api/mcp/tendfeed)
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
![Data](https://img.shields.io/badge/data-TED%20%C2%B7%20592k%20awards-orange)

</div>

---

MCP server for **bid/no-bid intelligence on EU public tenders**, built on 592,000 real
TED contract awards: **observed competition density** (median bidders, single-bidder share),
**price corridor**, **SME fit** and **beachhead ranking** for every open tender.
It answers *"can I win this?"*, not just *"what is out there?"*.

## Why this exists

Tender portals list what is out there — they don't tell you whether bidding is worth it.
Most losing bids die on competition and price, and that information exists: it is in the
award notices of tenders already decided. TendFeed benchmarks every open EU tender against
592,000 real award outcomes (bidder counts, winning prices, SME shares per CPV sector ×
country) and returns a verdict with its evidence — the score, the reason, and the number of
awards it is based on. An agent (or a human) can check the basis instead of trusting a guess.
Works in Claude Code, Claude Desktop, Cursor, and any other MCP-capable harness.

## Two ways to use it

**1. Connect to the hosted server (recommended)** — no installation, always current data:

```bash
claude mcp add --transport http tendfeed https://tendfeed.eu/api/mcp/tendfeed
```

For stdio-only clients (Claude Desktop, Cursor) via [mcp-remote](https://www.npmjs.com/package/mcp-remote):

```json
{
  "mcpServers": {
    "tendfeed": {
      "command": "npx",
      "args": ["mcp-remote", "https://tendfeed.eu/api/mcp/tendfeed"]
    }
  }
}
```

**2. Run the bundled stdio wrapper** — zero dependencies; `initialize`/`tools/list` answer
offline, tool calls reach the hosted endpoint:

```bash
node index.js
```

Or with Docker:

```bash
docker build -t tendfeed-mcp .
docker run -i --rm tendfeed-mcp
```

Add to an MCP client config:

```json
{
  "mcpServers": {
    "tendfeed": {
      "command": "node",
      "args": ["/path/to/tendfeed-mcp/index.js"],
      "env": { "TENDFEED_API_KEY": "cfm_live_…  (optional, unlocks the live board)" }
    }
  }
}
```

## Tools

| Tool | What it answers |
|---|---|
| `find_low_competition_lanes` | "Where is competition thinnest right now?" — ranks CPV sector lanes by observed competition density (median bidders, single-bidder share, bid rate, beachhead score) |
| `search_tenders` | Open EU tenders with a bid/no-bid verdict: Worth-It score, reason, competition density, price corridor, deadline, SME fit — filterable by sector, country, score |
| `get_verdict` | One versioned verdict object for a single tender (decision, score, per-channel evidence) |
| `find_winnable_lanes` | Deprecated alias of `find_low_competition_lanes`, kept for existing clients |

## Free tier and API key

Guests need no key: the expired-tender board is fully usable and every search returns a
`live_matched` count of current hits. An API key (created at
[tendfeed.eu](https://tendfeed.eu), active subscription) unlocks the live, still-biddable
board — sent as a header:

```bash
claude mcp add --transport http tendfeed https://tendfeed.eu/api/mcp/tendfeed \
  --header "Authorization: Bearer cfm_live_YOUR_KEY"
```

## Agent skill

A ready-made skill that teaches an agent to use the server well (lane before single tender,
always cite the verdict's reason and data basis) is served at
[tendfeed.eu/skill.md](https://tendfeed.eu/skill.md).

## Discovery

- MCP manifest: [tendfeed.eu/.well-known/mcp.json](https://tendfeed.eu/.well-known/mcp.json)
- Official MCP registry: `eu.tendfeed/tendfeed`
- Glama connector: [glama.ai/mcp/connectors/eu.tendfeed/tendfeed](https://glama.ai/mcp/connectors/eu.tendfeed/tendfeed)
- OpenAPI: [tendfeed.eu/api/v1/openapi.json](https://tendfeed.eu/api/v1/openapi.json)

## Data

Raw data: [TED — Tenders Electronic Daily](https://ted.europa.eu) (CC BY 4.0). The scoring,
benchmarks and verdicts are TendFeed's own. No guarantee of award.

TendFeed is a service of AnalystHAUS GmbH — [tendfeed.eu](https://tendfeed.eu)

TDQS

A3.8/5.0

Scored across 4 tools

Disambiguation2/5

Two tools (find_low_competition_lanes and find_winnable_lanes) are explicitly identical, causing ambiguity. The other two are distinct, but the duplication lowers clarity.

Naming Consistency3/5

Two tools use 'find_*_lanes' pattern, but the others use 'search_tenders' and 'get_verdict'. The pattern is mixed, making it less predictable.

Tool Count4/5

With 4 tools, the set is compact yet covers key functions for a tender intelligence service. Not too few or too many.

Completeness3/5

Core capabilities are present (finding lanes, searching tenders, retrieving verdicts), but missing features like listing all sectors or user account management create minor gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues