Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Agent-native website for ausschreibungsagenten.de — public tender search from 17 sources (DE/EU/UK) with 11 WebMCP in-page tools and a shared human+agent go/no-go board.
翻译准备中
正在加载完整 README。
查看完整 README ↗The website and public preview of ausschreibungsagenten.de — search across public procurement notices from 18 connected sources in Germany, the EU, the United Kingdom and US federal agencies (SAM.gov). The international sister brand is tender-agents.com.
The landing page is built to be used by agents: it exposes its own functions as WebMCP tools, so an agent in the browser can operate it instead of guessing its way through the UI — including a shared go/no-go board where the person and the agent work on the same shortlist.
document.modelContextThe linked original notice always prevails. No tool submits a bid, sends a form, or returns a recommendation.
The entry form searches by service, trade and performance region, without an implicit minimum score. Results can be loaded page by page. Decision cards use notice excerpts and explicit user criteria; missing information remains unknown. Evidence status, decisions and notes stay with the browser shortlist.
Up to eight searches can be saved on this device. On opening the page or clicking refresh, each compares the first 25 results and up to 25 previously observed IDs. Changes use actual deadline values and document content fingerprints, not polling timestamps. This browser feature does not send background email notifications. The authenticated pilot's email digest remains a separate workflow.
Requires the backend's typed deadlines, corrected unique pagination, public
ids lookup (including closed notices), requirements and document revisions.
The backend changes and historical-data repair are maintained in
shufflethis/ausschreibungsagent, branch feat/reliable-tender-workspace.
Run npm test and npm run build; after release, verify the search, pagination,
decision dialog, saved-search refresh and footer link on the production domain.
The landing page registers eleven tools through document.modelContext:
search, result details, source freshness, form prefill, and a shared go/no-go
board that the person and the agent edit together. Each call either changes what
is on the screen or reads that same visible state back. No tool submits a form;
none returns a recommendation.
This is a different surface from the MCP server at /mcp: there an agent calls
the backend without a browser; here state-changing calls visibly update the open
page, and read-only calls return what the person can see there.
Full description, tool list and testing instructions: WEBMCP.md.
This repository does not contain the tender scraper or the AgentLeads database. It contains the React/Vite website, the Vercel Functions for contact and pilot requests, and the public tender proxy.
| Path | What it is |
|---|---|
src/lib/webmcp.js | WebMCP registration adapter — feature detection, registerTool, AbortSignal cleanup |
src/lib/vergabe.js | Procurement logic — EU thresholds, CPV divisions, deadlines, weighted fit reasons. No DOM, no network |
src/lib/merkliste.js | Go/no-go board persistence |
src/lib/sprache.js, src/lib/tafelTexte.js | The board follows the browser language, German or English |
src/pages/LandingPage.jsx | Tool registration and the visible board |
api/ | Vercel Functions: tender proxy, contact, pilot lead, agent view |
docs/ | Working documents and submission dossiers (German) |
npm install
npm run dev # http://localhost:5180
npm test # 205 tests
npm run build # client + SSR + prerender + sitemap + prerender check
To see the WebMCP tools, open the dev server in Chrome 149+ with
chrome://flags/#enable-webmcp-testing enabled, or in the ChatGPT desktop
app's in-app browser.
Code comments and the operating documentation below are in German — that is the working language of this codebase, and the comments carry the reasoning behind decisions, not just descriptions. They are deliberately not translated: two copies of an explanation drift apart, and a stale explanation is worse than one in a language you can machine-translate.
The parts written for an outside audience are in English: WEBMCP.md, the tool descriptions and responses, and this section.
Website und öffentliche Vorschau von ausschreibungsagenten.de — der Suche nach öffentlichen Ausschreibungen aus 18 Quellen in Deutschland, der EU, Großbritannien und von US-Bundesbehörden (SAM.gov). Die internationale Schwestermarke ist tender-agents.com.
Die Landingpage ist agentenfähig gebaut: sie stellt ihre eigenen Funktionen über WebMCP als Werkzeuge bereit, sodass ein Agent im Browser sie bedienen kann, statt die Oberfläche zu erraten — inklusive einer gemeinsamen Go/No-Go-Tafel, auf der Mensch und Agent dieselbe Vorauswahl bearbeiten. Vollständige Beschreibung und Testanleitung: WEBMCP.md.
Dieses Repository enthält nicht den Tender-Scraper und nicht die AgentLeads-Datenbank. Es enthält:
api/tenders-public.js.Der Tender-Proxy liest AGENTLEADS_API_BASE aus den Vercel Environment Variables und leitet Anfragen an das private AgentLeads-Backend weiter:
Browser
-> ausschreibungsagenten.de (Vercel)
-> /api/tenders-public
-> ${AGENTLEADS_API_BASE}/api/public/tenders
-> AgentLeads-Datenbank
AGENTLEADS_API_BASE und alle Tokens/Secrets dürfen nicht in Git eingecheckt werden.
Der Kundenlogin startet unter /login, navigiert dann aber per direktem Browser-POST auf die eindeutige App-Origin aus VITE_APP_BASE_URL (empfohlen https://app.ausschreibungsagenten.de). Bestätigung, Session, Konto und Abrechnung bleiben vollständig auf dieser Origin. Dadurch sind weder ein Vercel-Auth-Proxy noch Cross-Origin-Cookies notwendig; das Backend sieht den tatsächlichen Client am vertrauenswürdigen Reverse Proxy. /konto und /abrechnung leiten in den geschützten Appbereich weiter.
Produktionsbetrieb:
| Bestandteil | Wert |
|---|---|
| Host | 159.195.43.209 |
| Projektpfad auf dem Host | ~/agentleads-account |
| Docker-Container | agentleads |
| Portbindung | 127.0.0.1:8767 -> 8000/tcp |
| Anwendung | FastAPI, SQLAlchemy, Jinja2/HTMX |
Die Bindung an 127.0.0.1 ist beabsichtigt: Port 8767 soll nicht direkt aus dem Internet erreichbar sein. Der öffentliche Zugriff erfolgt über den vorgeschalteten Reverse Proxy beziehungsweise die in AGENTLEADS_API_BASE konfigurierte HTTPS-Adresse.
Das Backend aggregiert öffentliche Vergabe-Bekanntmachungen für zwei aktive Verticals: Digital/Marketing/Web sowie Fenster/Fassade/Glas/Metallbau. Der Quellen-Relevance-Score klassifiziert den Index; ein davon getrennter Firmen-Fit berücksichtigt CPV, Begriffe, Ausschlüsse, Leistungsort, Auftragswert und Frist und erklärt seine Einzelkomponenten.
Quellenstatus:
api.ted.europa.eu: aktivservice.bund.de RSS: aktivBLOCKERS.md des privaten Backend-RepositoriesDas private Backend enthält außerdem Stripe-Code, Volltextsuche, einen A2A-JSON-RPC-Agent-Endpunkt und Agent-Discovery-Metadaten. Öffentliche Profilerstellung, Signup, Checkout, MCP und schreibende A2A-Profilaktionen sind im Produktionsbetrieb deaktiviert. Pilotzugänge werden intern vorbereitet und ausschließlich per Magic Link freigegeben.
Pilotumfang: geschütztes Profil-Dashboard, kontrollierter E-Mail-Digest-Test, nur lesende GAEB-DA-XML-Analyse für X83/X84 sowie Tender-Export als JSON, CSV, XLSX und optional signierter Webhook. Der automatische Digest wird erst nach erfolgreichem Pilottest freigeschaltet. Konkrete ERP-Connectoren, WhatsApp und Push sind nicht produktiv.
Nach Anmeldung auf dem Backend-Host:
cd ~/agentleads
docker ps --filter name=agentleads
docker inspect --format '{{json .State.Health}}' agentleads | jq .
docker logs --tail 200 agentleads
git log --oneline -10
Für einen vollständigen Datenfluss zusätzlich prüfen:
AGENTLEADS_API_BASE im Vercel-Projekt,/api/tenders-public.Die Website wird über das Vercel-Projekt trackys-projects-6c71603f/ausschreibungsagenten bereitgestellt. Änderungen am Scraper oder Poll-Zeitplan werden ausschließlich im privaten AgentLeads-Backend vorgenommen; Änderungen an der Darstellung oder am Proxy gehören in dieses Repository.
Erforderliche Vercel-Konfiguration:
VITE_APP_BASE_URL=https://app.ausschreibungsagenten.de ist öffentlich und enthält kein Secret.AGENTLEADS_API_BASE bleibt eine serverseitige Variable für die vorhandenen Vercel Functions.Lokale Abnahme:
npm test
npm run build
npm audit --audit-level=high
cli/cli/ ist ein eigenes npm-Paket (ausschreibungsagenten, MIT, publiziert vom
npm-Account agentification). Es liest ausschließlich die öffentlichen,
anonymen Endpunkte und hat keine Abhängigkeiten.
node cli/bin.js suche Fassade --limit 3 # lokal
npx ausschreibungsagenten laender # aus dem Registry
cd cli && npm version patch && npm publish # neue Fassung
Die Tests liegen unter cli/cli.test.js und laufen im normalen npm test mit.
Der Einstiegspunkt ist cli/bin.js — cli/index.js ist ein reines Modul und
darf nie selbst entscheiden, ob es "als Programm" läuft: npm legt für bin
einen Symlink an, und jede Namensprüfung scheitert dort still.
Der MCP-Server ist zusätzlich bei Smithery gelistet:
@agentifizierung/ausschreibungsagenten (externer Release, zeigt auf
https://api.ausschreibungsagenten.de/mcp — Smithery hostet nichts).
Der letzte Eintrag unter rewrites in der vercel.json fängt jede Adresse ab,
die weder eine Datei noch eine andere Function trifft, und leitet sie an
api/not-found.js. /api/… ist per Negativ-Lookahead ausgenommen: dort
antwortet api/[...path].js mit application/problem+json, und diese Function
würde der Auffang sonst überholen. Diese Function antwortet immer mit HTTP 404 und verhandelt
den Rumpf: Markdown mit Linkliste für Agenten (Accept: text/markdown,
?mode=agent oder bekannter Bot-User-Agent), sonst die gestaltete HTML-Seite.
Die Erkennung teilt sie sich mit der middleware.js über
lib/agentenErkennung.js.
Zwei Folgen davon:
public/404.html gibt es nicht mehr. Die HTML-Fassung steht als Konstante in
api/not-found.js; scripts/prerender.mjs schreibt daraus beim Build
dist/404.html. Diese Datei greift, wenn der Auffang-Rewrite oder die
Function einmal fehlt — nicht bei einem Laufzeitfehler der Function, der
liefert 500.Neue Routen brauchen weiterhin eine eigene Datei im dist — check-prerender
erzwingt das. Ohne sie liefert der Auffang-Rewrite jetzt 404 statt der
Startseite.
Zwei Stellen dieser Website hängen an Entscheidungen, die im Backend-Repo dokumentiert sind
(docs/HANDOVER-2026-08-20.md, Merkregeln 3 und 10). Kurz:
/partner nennt 20 % netto wiederkehrend, 60 Tage Zuordnung, 30 Tage Sperrfrist. Diese
Zahlen stehen identisch in Numok und zusätzlich in der Meta-Beschreibung der Route in
src/routes.js. Wer sie ändert, muss alle drei Stellen nachziehen — die Meta-Beschreibung
lief schon einmal auseinander und versprach im Suchergebnis andere Konditionen als die Seite.src/pages/LandingPage.jsx).
Ohne das feuert sie je Tastendruck, und weil das Backend pro Aufruf bis zu fünf KI-Kurzfassungen
erzeugt, bringt ein getipptes Wort 30–50 Modellaufrufe und läuft ins Ratelimit. abort()
genügt nicht: es stoppt nur den Browser, nicht die Vercel Function und nicht das Backend.Preise werden auf der Website als Orientierung angezeigt. Ein Checkout wird erst nach vollständiger Stripe-Live-Konfiguration und Webhook-Abnahme wieder freigeschaltet.
Betrieben von yawusa UG (haftungsbeschränkt), Berlin — Impressum · Datenschutz
Lizenz: MIT, siehe LICENSE. Die Lizenz deckt den Inhalt dieses Repositorys. Für die Nutzung des Dienstes gelten die Nutzungsbedingungen.