{"_id":"@blufr/mcp-server","name":"@blufr/mcp-server","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@blufr/mcp-server","version":"0.1.0","description":"Blufr — serveur MCP stdio local : l'outil verify_diff vérifie le travail d'un agent de code (le diff est le contrat) et rend un verdict en clair. Tout reste local. Voir docs/mcp-clients.md.","type":"module","engines":{"node":">=20"},"bin":{"blufr-mcp":"dist/channels/mcp-server.js"},"main":"dist/index.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/KevArlen/blufr.git"},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json","test":"vitest run","test:watch":"vitest","demo":"tsx src/demo.ts","mcp":"tsx src/channels/mcp-server.ts","web":"tsx src/channels/upload-server.ts","start":"node dist/channels/upload-server.js","prepublishOnly":"npm run build"},"devDependencies":{"@types/node":"^22.7.0","tsx":"^4.19.1","typescript":"^5.6.2","vitest":"^2.1.1"},"dependencies":{"tree-sitter-typescript":"0.23.2","web-tree-sitter":"0.26.10"},"gitHead":"2c85e8417cfdfd6df3c61c3ece7c3cb85aa7de4a","_id":"@blufr/mcp-server@0.1.0","bugs":{"url":"https://github.com/KevArlen/blufr/issues"},"homepage":"https://github.com/KevArlen/blufr#readme","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-fNyvRiR9yiMsZdClzBI5/FBo8VNIPDIL/mTw+03vTs2pcpLEaV1G9GwXdN0Eme+jW+ApH19TFTkDts2w/I3NiA==","shasum":"8b2e24e846bbc92f1240628a16d6a2b42e2ae41a","tarball":"https://registry.npmjs.org/@blufr/mcp-server/-/mcp-server-0.1.0.tgz","fileCount":93,"unpackedSize":309714,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD5UHJDW0CAavHQTzdZ1mBA1JpWnrolMPOFsZqYr+c0FQIhAN6OgVKoBnESHbAz+qiWkXfiioEXyjYA1RSV9Nbl+kg+"}]},"_npmUser":{"name":"arlensystems","email":"kevin@arlenhq.com"},"directories":{},"maintainers":[{"name":"arlensystems","email":"kevin@arlenhq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-server_0.1.0_1783267130104_0.7970871408615154"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-05T15:58:49.997Z","0.1.0":"2026-07-05T15:58:50.245Z","modified":"2026-07-05T15:58:50.428Z"},"maintainers":[{"name":"arlensystems","email":"kevin@arlenhq.com"}],"description":"Blufr — serveur MCP stdio local : l'outil verify_diff vérifie le travail d'un agent de code (le diff est le contrat) et rend un verdict en clair. Tout reste local. Voir docs/mcp-clients.md.","homepage":"https://github.com/KevArlen/blufr#readme","repository":{"type":"git","url":"git+https://github.com/KevArlen/blufr.git"},"bugs":{"url":"https://github.com/KevArlen/blufr/issues"},"readme":"# Blufr — appelle le bluff de ton agent\n\n> **Le diff est le contrat.** Blufr lit ce qu'un agent IA a réellement livré (le diff, les métadonnées de session) et rend un verdict **en clair** — jamais du jargon, jamais du code brut. Les détecteurs jugent sur les **faits** (déterministe) ; le LLM ne fait que **narrer**. Chaque verdict produit la **prochaine commande à copier**, jamais une simple alerte.\n\n## Les 6 Tells\n\nLe moteur cherche six signatures de « bluff » d'agent :\n\n| Tell | Ce qu'il détecte | Source |\n|---|---|---|\n| **Over-context** | Session gonflée : contexte qui déborde la fenêtre (compaction), coût qui balloon | métadonnées de session |\n| **Mock** | Du toc livré comme réel : fonction creuse, `// TODO`, valeur figée, catch vide | contenu (AST + motifs) |\n| **Omission** | L'agent affirme plus que le livré ne montre (« testé » sans test réel) | déclaration ↔ livraison |\n| **Loop** | L'agent tourne en rond : revert / toggling / churn stérile | fenêtre de commits |\n| **Overbet** | Modèle surdimensionné pour la tâche (premium pour centrer un bouton) | modèle déclaré |\n| **Drift** | Le livré s'écarte de l'intention du pilote (brief ↔ livraison) | brief ↔ livraison |\n\nVerdict au ton poker : **Bluff caught** · **Pot's clean** · **Folding session** · **All-in on a cheap bet**, + le Tell nommé + une commande copiable.\n\n## Trois canaux, un seul moteur\n\n`verify(ctx) -> Verdict` est commun aux trois. Un canal change seulement *d'où viennent les faits*, jamais *qui juge*.\n\n- **Upload (web)** — colle ce que ton agent a produit → verdict en clair. UI + écran Feed. `npm run web` → http://localhost:4319 (`/` = vérification, `/app` = feed).\n- **MCP** — serveur stdio local `verify_diff`, « Blufr vit dans ton agent », tout reste local. `npm run mcp`. Voir [`docs/mcp-clients.md`](docs/mcp-clients.md) pour les 8 clients.\n- **GitHub webhook** — audite le travail qui atterrit sur `main` (commentaire de PR + Check Run non bloquant), avec debouncing de session ~15 min.\n\n## Démarrer\n\n```bash\nnpm install\nnpm test        # 138 tests (moteur, canaux, privacy red-team)\nnpm run demo    # 🔴 loss/reset · 🟢 clean/close · 🟡 uncertain/clarify\nnpm run web     # UI upload + Feed\nnpm run mcp     # serveur MCP stdio\n```\n\n## Déploiement\n\nUn seul conteneur (Dockerfile fourni) sert l'UI upload + le feed + le webhook GitHub — le debouncing *stateful* vit dans le conteneur (pas de KV externe). Cible : **Railway**. `PORT` est fourni par l'hébergeur.\n\n**⚠ Persistance** : le feed et les compteurs analytics sont écrits dans `BLUFR_DATA_DIR`. Sans un **volume Railway monté** pointé par cette variable, feed + métriques repartent à zéro à chaque redéploiement. Variables pour l'audit GitHub (Phase B, optionnel) : `GITHUB_WEBHOOK_SECRET`, `GITHUB_APP_ID`, `GITHUB_APP_PRIVATE_KEY`.\n\nGuide complet (volume, env vars, activation de la GitHub App, `/healthz`) : [`docs/deploy.md`](docs/deploy.md).\n\n## Confidentialité (non négociable)\n\nLe **diff n'est jamais stocké** (traitement éphémère). La narration ne reçoit que des *constats* (faits), jamais le code. Le verdict sérialisé est **sanitisé** : aucun nom de modèle brut ni token de brief brut n'y survit — verrouillé par un test de régression red-team (`test/privacy-redteam.test.ts`, rapport dans `docs/privacy-qa-report.md`).\n\n## Architecture\n\n```\nsrc/\n  types.ts                  Finding, Verdict, ConsumptionRecord, DerivedMetric, NextAction\n  diff/parser.ts            parseUnifiedDiff · linediff.ts (avant/après)\n  detectors/                over-context · mock (+mock-ast) · omission (+omission-ast) · loop · overbet · drift\n  cost/factors.ts           table de facteurs versionnée + toUsd (porte CO2e ouverte)\n  narration/                prompts.ts (poker par Tell) · render.ts (rendu partagé multi-Tell)\n  channels/                 upload · mcp (+server) · github (+api) · upload-server (UI + Feed + webhook)\n  verify.ts                 orchestrateur pur (+ sanitisation privacy centrale)\n  index.ts                  API publique\nscripts/                    extract-session-metadata (calibration A.8) · backtest-over-context\n```\n\n> **v0.** Seuils Over-context et prix de la table = provisoires (calibrés sur données réelles ARLEN). Persistance des verdicts, durcissement AST étendu, et publication npm du serveur MCP = suite.\n","readmeFilename":"README.md","_rev":"1-bdc71f8f060d2f6e9d836e5b81bca3be"}