Attesta
Provenance-grade Portugal residential property data and signed JWS verification for AI agents.
التثبيت
أضف هذا إلى إعدادات MCP في عميلك (Claude Desktop: claude_desktop_config.json، وCursor: .cursor/mcp.json، ويستخدم VS Code وغيره الصيغة نفسها «mcpServers»).
claude mcp add --transport http attesta 'https://api-production-d9143.up.railway.app/mcp'
{
"mcpServers": {
"attesta": {
"type": "http",
"url": "https://api-production-d9143.up.railway.app/mcp"
}
}
}
التوثيق
مأخوذ من ملف README للمشروع على GitHub ويُحدَّث أسبوعيًا. تفتح الروابط على GitHub.
Attesta
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
- [x] M0 — Skeleton, CI, docker-compose, alembic scaffold
- [x] M1 — Schema, ingestion worker, fixtures, PII tests
- [x] M2 — Resolution matcher, read API
- [x] M3 — MCP tools, metering choke point, guardrails
- [x] M4 — Verification pipeline, JWS/JWKS, evidence API, eval harness (62 claims), attestation spec
- [x] 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
الأسئلة الشائعة
ما هو Attesta؟
Provenance-grade Portugal residential property data and signed JWS verification for AI agents.
كيف أثبّت Attesta؟
يعمل كخادم بعيد. في Claude Code: claude mcp add --transport http attesta 'https://api-production-d9143.up.railway.app/mcp'. وفي العملاء الآخرين، الصق إعداد JSON من هذه الصفحة في إعدادات MCP الخاصة بهم.
هل يحتاج Attesta إلى مفتاح API؟
لا يذكر إدراجه في السجل أي مفتاح أو سر إلزامي. قد تتطلب بعض الميزات حسابًا لدى الخدمة التي يتصل بها.
هل Attesta مفتوح المصدر؟
شيفرته علنية على GitHub، لكن المستودع لا يعلن ترخيصًا قياسيًا.
من يصون Attesta؟
ينشره doralboim. يدرجه AI.tn لكنه لا يصونه ولا يوصي به.
من سجل MCP الرسمي. الإدراج ليس توصية: راجع شيفرة الخادم وصلاحياته قبل منحه الوصول إلى بياناتك.