Attesta
MCP serverEverything elseProvenance-grade Portugal residential property data and signed JWS verification for AI agents.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use Attesta
Install Attesta
The server’s own address, for the clients that take one directly. Or connect ahel onceand every client you use reads it from one address, with the account kept on ahel rather than in each client’s config.
Claude Code
claude mcp add --transport http attesta 'https://api-production-d9143.up.railway.app/mcp'Run it once in your project, then open /mcp to approve any sign-in the server asks for.
Claude Desktop
https://api-production-d9143.up.railway.app/mcpAdd a custom connector in Settings, paste this address, and approve the sign-in.
Cursor
cursor://anysphere.cursor-deeplink/mcp/install?name=attesta&config=eyJ1cmwiOiJodHRwczovL2FwaS1wcm9kdWN0aW9uLWQ5MTQzLnVwLnJhaWx3YXkuYXBwL21jcCJ9Open the link and Cursor adds the server at that address.
ChatGPT
https://api-production-d9143.up.railway.app/mcpIn Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.
Codex
codex mcp add attesta --url 'https://api-production-d9143.up.railway.app/mcp'Run it once, then sign in with codex mcp login attesta if the server asks for an account.
From the project's README
As published by doralboim/attesta in README.md.
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
Advanced
- Delivery
- attesta MCP server → your ahel gateway (mcp.ahel.ai) → every connected AI client.
- Catalog kind
- mcp-server
- Gateway key
io-github-doralboim-attesta- Source
- github.com/doralboim/attesta
- Hosted endpoint
https://api-production-d9143.up.railway.app/mcp