About Attesta
Attesta is a Portugal residential property data and verification platform for AI agents, providing provenance-oriented data and signed JWS verification. It includes ingestion and record-resolution pipelines, a REST API and an MCP endpoint, with public keys available through JWKS.
Key features
- 01Ingest property data, including bundled fixtures
- 02Resolve and match property records
- 03Expose REST and MCP endpoints
- 04Create and verify JWS signatures
- 05Publish public keys through JWKS
- 06Optionally connect models via LiteLLM
Use cases
- 01Run a local ingestion pipeline on fixture data
- 02Query Portuguese residential property data through the API
- 03Verify JWS signatures on property data
- 04Evaluate claims against labeled examples
MCP support
Attesta provides an MCP endpoint at `/mcp` for MCP clients to access its property-data capabilities. It also exposes a REST API, JWKS and evidence-related endpoints.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://api-production-d9143.up.railway.app/mcpclaude mcp add --transport http doralboim-attesta https://api-production-d9143.up.railway.app/mcp{"mcpServers":{"doralboim-attesta":{"type":"http","url":"https://api-production-d9143.up.railway.app/mcp"}}}Open in Cursor{"servers":{"doralboim-attesta":{"type":"http","url":"https://api-production-d9143.up.railway.app/mcp"}}}Open in VS Code{"mcpServers":{"doralboim-attesta":{"type":"http","url":"https://api-production-d9143.up.railway.app/mcp"}}}{"mcpServers":{"doralboim-attesta":{"serverUrl":"https://api-production-d9143.up.railway.app/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
Details
From the project READMEAttesta
B2A platform: provenance-grade Portugal residential property data + signed JWS verification for AI agents.
Authoritative docs: attesta-architecture.md · attesta-agent-prompt.md
Quick start
make install
cp .env.example .env
make db-up # Postgres + pgvector
make migrate # apply Alembic migrations
make dev # API at :8000
| Endpoint | URL |
|---|---|
| Health | /healthz |
| REST API | /docs |
| MCP | /mcp |
| JWKS | /.well-known/jwks.json |
| Agent discovery | /llms.txt |
Pipeline (local)
make ingest # attesta-ingest --fixture (bundled JSON corpus)
make resolve # attesta-resolve
make test
Ingestion
Default: bundled fixtures in tests/fixtures/ — no external scraper credentials needed.
make ingest # same as attesta-ingest --fixture
attesta-ingest --fixture # explicit
attesta-ingest --source idealista_pt # optional: Apify actor (needs APIFY_* in .env)
attesta-ingest --source imovirtual # optional: Apify actor
Live portal collectors implement app/ingestion/base.py (BaseCollector). Apify-backed Idealista/Imovirtual collectors ship as optional plugins; add a new source by subclassing, not refactoring the pipeline. See docs/decisions/008-fixture-first-ingestion.md.
To grow production corpus: pick a collector strategy (build Apify actors, direct HTTP, licensed feed, CSV import), wire env, and schedule the ingest worker on Railway.
CI
GitHub Actions runs ruff, mypy (advisory), pytest on SQLite + Postgres.
Decisions
Architecture Decision Records: docs/decisions/
Cursor rules: .cursor/rules/
Milestone status
- M0 — Skeleton, CI, docker-compose, alembic scaffold
- M1 — Schema, ingestion worker, fixtures, PII tests
- M2 — Resolution matcher, read API
- M3 — MCP tools, metering choke point, guardrails
- M4 — Verification pipeline, JWS/JWKS, evidence API, eval harness (62 claims), attestation spec
- M5 — Railway 3-service config, demo + verify scripts, OpenAPI export
Verification
make eval # 62 labeled claims, 75% threshold
python scripts/verify_jws.py <jws> --local
python scripts/demo.py # E2E against local API
make openapi # writes public/openapi.json
LLM (optional, provider-agnostic via LiteLLM)
Set LLM_ENABLED=true and configure models + prompt file paths in .env (see .env.example).
Uses LiteLLM — point LLM_PARSE_MODEL / LLM_ADJUDICATE_MODEL at any supported provider (anthropic/, openai/, gemini/, azure/, groq/, etc.).
Provider API keys follow LiteLLM env conventions — set only the key(s) for your chosen provider(s).
See distribution/llm-providers.md for examples and cost estimates.
Attestation spec: public/attestation-spec.md
Market data contract (stats/comps envelopes): public/market-data-contract.md
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.