Dvf Mcp App — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Dvf Mcp App (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An interactive MCP App that displays Paris real estate prices per arrondissement, directly inside Claude.
Built with the MCP Apps SDK (@modelcontextprotocol/ext-apps).
Demo DVF Paris
Ask Claude about Paris real estate prices and get an interactive widget with:
Data source: DVF (Demandes de Valeurs Foncieres) from data.gouv.fr.
Claude MCP Server UI (iframe)
│ │ │
│── "prix Paris 11" ──────>│ │
│ │── get-dvf-stats ───────>│
│ │ structuredContent │── Map + Stats
│ │ │
│── "compare 6e vs 11e" ──>│ │
│ │── compare-dvf-stats ───>│
│ │ mode: "compare" │── Map + Bar chart
│ │ │
│── "prix rue Roquette" ──>│ │
│ │── search-dvf-address ──>│
│ │ mode: "address" │── Map + Marker + Compareget-dvf-stats, compare-dvf-stats or search-dvf-addressui://dvf/mcp-app.htmlapp.ontoolresult| Tool | Input | Output |
|---|---|---|
get-dvf-stats | arrondissement (1-20) | Price stats for one arrondissement |
compare-dvf-stats | arrondissement_1, arrondissement_2 (1-20) | Side-by-side comparison with bar chart |
search-dvf-address | adresse (string) | Stats for cadastral section + comparison with arrondissement |
| Component | Technology |
|---|---|
| MCP Apps SDK | @modelcontextprotocol/ext-apps |
| MCP Server | @modelcontextprotocol/sdk |
| Build | Vite + TypeScript |
| UI | Vanilla JS |
| Map | Leaflet + OpenStreetMap (no API key needed) |
| Charts | Pure SVG (no dependencies) |
| Transport | stdio (Claude Desktop) or Streamable HTTP |
| API | Usage |
|---|---|
| MCP data.gouv | Real-time DVF stats |
| API Géoplateforme | Address geocoding |
| cadastre.data.gouv.fr | Cadastral section geometries (GeoJSON) |
npm install
npm run buildAdd to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"dvf-paris": {
"command": "bash",
"args": ["-c", "cd /path/to/dvf-mcp-app && npx tsx main.ts --stdio"]
}
}
}Then restart Claude Desktop.
# Watch mode (UI hot reload + server)
npm run dev
# Build only
npm run build
# Run server (Streamable HTTP on port 3001)
npm run servedvf-mcp-app/
├── server.ts # MCP Server + Tools + Resource
├── main.ts # Entry point (stdio + HTTP)
├── mcp-app.html # UI shell (HTML)
├── src/
│ ├── mcp-app.ts # UI logic (map, chart, host communication)
│ ├── mcp-app.css # Widget styles
│ ├── api/ # External API clients
│ │ ├── cadastre.ts # Cadastre GeoJSON client
│ │ ├── data-gouv.ts # MCP data.gouv client
│ │ └── geoplateforme.ts # Geocoding client
│ └── data/
│ ├── dvf-paris.json # Pre-computed stats (fallback)
│ └── arrondissements.geojson.json # GeoJSON boundaries
├── package.json
├── tsconfig.json
└── vite.config.tsMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.