Project Info
Inspiration
CivitasX began from a simple but powerful observation: governments still run on paper logic in a digital world. One of our teammates has close family members working in the public sector and has seen firsthand how outdated systems create endless friction—forms that must be retyped, portals that don’t talk to each other, and decisions that vanish into untraceable bureaucracy. We asked ourselves: “What if citizens could talk to their city like they talk to a person?” “And what if every government action was provably transparent?” That vision—of turning bureaucracy into conversation and governance into an intelligent, verifiable system—sparked CivitasX: the operating system for an AI-powered city.
What it does
CivitasX transforms a city into a living, conversational intelligence. Citizens can simply talk, type, or send an image—and the system instantly understands intent, executes complex workflows, and records the resulting civic action on the XRP Ledger for immutable accountability. Example: A citizen says, “I need to renew my driver’s license.” CivitasX detects the intent through semantic parsing, triggers the “license renewal” workflow, retrieves profile and document data, and performs all necessary steps autonomously—while logging a proof-of-action hash on XRPL. It integrates text, voice, and image reasoning, creating an entirely new paradigm where civic processes become intelligent, self-orchestrating conversations.
How we built it
CivitasX was built entirely on the Creao agentic platform, which allows AI systems to design and deploy other AI systems. We used Creao’s compositional model to build a multi-agent ecosystem combining official MCPs (Model Context Protocols) with custom integrations for blockchain and voice. Official Creao MCPs Used: 🧠 CreaoSearch MCP — semantic ES|QL civic data search 🗂️ CreaoFileUpload MCP — secure upload for documents, images, and audio 👁️ OpenAIGPTVision MCP — interprets real-world images (e.g., road damage, public works) 💬 OpenAIGPTChat MCP — core reasoning for citizen dialogue 📰 X (Social Media) MCP — retrieves real-time civic sentiment Custom MCP Integrations Built: 🔊 Vapi MCP — enables real-time voice call interactions with citizens 🔗 XRPLedger MCP — records all verified civic actions on the XRP Ledger for tamper-proof transparency Supporting APIs: 🎙️ LiveKit — real-time two-way voice streaming 🗣️ Fish Audio — speech-to-text and text-to-speech for natural voice conversations Every workflow, from conversation parsing to ledger logging, is autonomously orchestrated inside Creao’s Render, Biz, and Data layers—demonstrating AI not just as an assistant, but as an autonomous system builder.
Challenges we ran into
Interoperability: Getting multiple MCPs—official and custom—to align schemas and reasoning contexts dynamically. Latency: Achieving natural, sub-second voice interactions while integrating XRPL validation. Blockchain integration: Designing asynchronous confirmation flows so the system could continue reasoning while XRPL transactions finalized. Workflow inference: Creating semantic triggers (e.g., “renew driver’s license”) that reliably launched complex multi-agent processes.
Accomplishments we're proud of
🚀 Built the first AI-powered civic operating system, completely inside an AI builder (Creao) — no manual code. 🤖 Integrated 9 autonomous MCPs that collaborate across text, voice, and image modalities. 🔗 Linked AI reasoning directly to blockchain accountability, bridging cognition with verifiable trust. 🏗️ Implemented intent-triggered workflows that autonomously complete real government-style procedures. ⚡ Delivered a fully functional prototype in under 5 hours — a complete AI-governance simulation that truly works.
What we learned
How agentic build systems like Creao can generate and orchestrate full applications autonomously. How to use the XRP Ledger for civic trust infrastructure—beyond finance—to verify decisions, feedback, and citizen participation. How AI multimodality (voice, text, image) can make civic systems inclusive, accessible, and human again. How to design autonomous workflows that blend natural language understanding with blockchain verification.
What's next
🏛️ Pilot Programs: Partner with municipalities to test participatory budgeting, public feedback verification, and form automation. 🛰️ IoT & GIS Integration: Real-time infrastructure monitoring (traffic, waste, utilities) feeding directly into AI civic analytics. 💰 XRPL Rewards: Incentivize verified citizen engagement through micropayments or civic token rewards. 🌐 Multilingual Expansion: Deploy voice models for major global languages via Fish Audio. 🤝 Open Protocol Vision: Turn CivitasX into an open civic operating standard—where any government can deploy an AI city OS in minutes. Tagline CivitasX — Where the City Thinks, Listens, and Evolves with You.
XRPL Proof & Certificates MCP Server
A Model Context Protocol (MCP) server that provides tamper-proof document proofs and NFT certificates on the XRP Ledger testnet.
🎯 Purpose
This MCP enables government service platforms to:
- Create immutable, timestamped proofs of document submissions
- Verify document authenticity via blockchain
- Issue NFT certificates for official records
- Process service fee payments
Privacy-First: No personal data or document content is stored on-chain, only SHA-256 hashes.
🚀 Quick Start
1. Create XRPL Testnet Wallet
Visit: https://xrpl.org/xrp-testnet-faucet
- Generate a new testnet wallet
- Copy your seed/secret (starts with 's')
- Save it securely
2. Environment Setup
# Copy environment template
cp .env.example .env
# Edit .env and add your testnet seed
# XRPL_TESTNET_SEED=sYourSeedHere
3. Install Dependencies
pip install -r requirements.txt
4. Run the Server
python server.py
🛠️ Available Tools
1. xrpl_timestamp
Record a document hash on the blockchain.
xrpl_timestamp(
sha256_hex_str="a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a",
meta={
"serviceId": "passport-renewal",
"caseId": "CR-2024-001"
}
)
Returns:
{
"txHash": "ABC123...",
"explorerUrl": "https://testnet.xrpl.org/transactions/ABC123...",
"ledgerIndex": 12345
}
2. verify
Verify if a document proof exists.
# With hash
verify("a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a")
# With Base64 PDF
verify("JVBERi0xLjQKJeLjz9MK...")
Returns:
{
"sha256": "a7ffc6f8...",
"found": true,
"txHash": "ABC123...",
"explorerUrl": "https://testnet.xrpl.org/transactions/ABC123...",
"timestamp": "2025-10-25T10:30:00Z"
}
3. xrpl_mint_document_nft
Mint an NFT certificate.
xrpl_mint_document_nft(
cid="QmX7ffc6f8bf1ed76651c14756a061d662",
meta={
"sha256": "a7ffc6f8...",
"title": "Passport Certificate",
"caseId": "CR-2024-001"
}
)
4. pay_fee
Process a payment (testnet).
pay_fee(
amount_minor=1000000, # 1 XRP
destination="rN7n7otQDd6FczFgLdlqtyMVrn3S9gcWjQ",
memo="Service fee"
)
🏗️ Architecture
xrpl-proof-mcp/
├── server.py # Main MCP server with tools
├── src/
│ ├── xrpl_client.py # XRPL connection & transactions
│ ├── hash_utils.py # SHA-256 utilities
│ ├── nft_handler.py # NFT minting
│ └── verification.py # Proof verification
└── .env # Configuration
🔒 Security
- Testnet Only: Never use mainnet credentials
- No PII On-Chain: Only hashes are recorded
- Environment Variables: Keep
.envsecure and never commit
📚 Integration with Creao
This MCP server is designed to be used by the Creao platform. Once running, Creao can call these tools to:
- Generate document PDFs
- Hash them with SHA-256
- Record proofs on XRPL
- Verify submissions
- Issue NFT certificates
🧪 Testing
# Test hash computation
python -c "from src.hash_utils import compute_sha256_from_bytes; print(compute_sha256_from_bytes(b'test'))"
# Test XRPL connection
python -c "from src.xrpl_client import XRPLClient; import os; from dotenv import load_dotenv; load_dotenv(); client = XRPLClient(os.getenv('XRPL_TESTNET_SEED'), os.getenv('XRPL_NETWORK')); client.connect(); client.disconnect()"
📖 Documentation
- XRPL Docs: https://xrpl.org/docs
- FastMCP: https://github.com/jlowin/fastmcp
- Testnet Explorer: https://testnet.xrpl.org
🎉 Demo Flow
- User submits form → Platform generates PDF
- Platform calls
xrpl_timestamp(hash)→ Gets blockchain proof - User can download certificate with proof link
- Anyone can call
verify(pdf)→ Confirms authenticity
📝 License
Built for hackathon purposes - XRP Ledger track requirement.
Analysis
View
Metric
- 2
- 2
- 1
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- HTMLIn code
- JavaScriptIn code
- Next.jsIn code
- PythonIn code
- ReactIn code
- SQLIn code
- SupabaseIn code
- Tailwind CSSIn code
- TypeScriptIn code
- Vercel AI SDKIn code
- DockerClaimed
11 of 12 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
860 KB
Source files
279
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
rajashekarcs2023/calhacks-12
315 files · 1.5 MB · @ da38cc9
Structure
Interface
132 files · 42%Screens, components and styles rendered to the user.
API & routing
15 files · 5%Request entry points: routes, handlers and controllers.
Application logic
35 files · 11%Domain rules, services and shared utilities.
Data & schema
65 files · 21%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript76%
- Markdown11%
- Python4%
- JavaScript3%
- Shell2%
- SQL2%
- Other (3)2%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
creao-build-68fe3686238ad60990e38dcf/package.json
npm · 85- @fortawesome/fontawesome-svg-core
- @fortawesome/free-brands-svg-icons
- @fortawesome/react-fontawesome
- @hookform/resolvers
- @protobuf-ts/runtime
- @radix-ui/react-accordion
- @radix-ui/react-alert-dialog
- @radix-ui/react-aspect-ratio
- @radix-ui/react-avatar
- @radix-ui/react-checkbox
- @radix-ui/react-collapsible
- @radix-ui/react-context-menu
- @radix-ui/react-dialog
- @radix-ui/react-dropdown-menu
- @radix-ui/react-hover-card
- @radix-ui/react-label
- @radix-ui/react-menubar
- @radix-ui/react-navigation-menu
- +67 more
civitasX/package.json
npm · 64- @emotion/is-prop-valid
- @hookform/resolvers
- @radix-ui/react-accordion
- @radix-ui/react-alert-dialog
- @radix-ui/react-aspect-ratio
- @radix-ui/react-avatar
- @radix-ui/react-checkbox
- @radix-ui/react-collapsible
- @radix-ui/react-context-menu
- @radix-ui/react-dialog
- @radix-ui/react-dropdown-menu
- @radix-ui/react-hover-card
- @radix-ui/react-label
- @radix-ui/react-menubar
- @radix-ui/react-navigation-menu
- @radix-ui/react-popover
- @radix-ui/react-progress
- @radix-ui/react-radio-group
- +46 more
requirements.txt
pypi · 3- fastmcp
- python-dotenv
- xrpl-py
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
Privacy-first: no PII or document content stored on-chain, only hashesVerified
No personal data or document content is stored on-chain, only SHA-256 hashes
Claimed on readmehigh confidencesrc/xrpl_client.py:65— submit_memo_transaction only writes the hash, timestamp, and caller-supplied non-PII meta fields into the memo, not document content
Vapi real-time voice call integration with citizensVerified
Custom Vapi MCP enables real-time voice call interactions with citizens
Claimed on Devposthigh confidencecreao-build-68fe3686238ad60990e38dcf/src/routes/index.tsx:526— initiateVapiCall calls createCall (Vapi hook) with a real assistantId/phoneNumberId and is triggered from the chat flow on eviction-intent + 'call me' phrasingcreao-build-68fe3686238ad60990e38dcf/src/hooks/use-vapi-direct-call.ts:1— hook wraps the Vapi API for placing calls
XRPL document hash timestamping (xrpl_timestamp tool)Verified
Records a SHA-256 document hash immutably on the XRP Ledger testnet as proof-of-action
Claimed on readmehigh confidenceserver.py:60— xrpl_timestamp tool validates the hash and calls xrpl_client.submit_memo_transactionsrc/xrpl_client.py:51— submit_memo_transaction builds an AccountSet tx with a JSON memo and submits it via submit_and_wait
XRPL NFT certificate mintingVerified
Issue NFT certificates for official records on XRPL
Claimed on readmehigh confidenceserver.py:155— xrpl_mint_document_nft tool calls nft_handler.mint_document_nftsrc/nft_handler.py:41— mint_document_nft builds an NFTokenMint transaction with a hex-encoded URI and submits it
XRPL proof verification (verify tool)Verified
Verify if a document hash/PDF proof exists on the XRP Ledger
Claimed on readmehigh confidenceserver.py:100— verify tool detects hash vs base64 PDF input and calls proof_verifier.verify_proofsrc/verification.py:104— verify_proof queries account transactions and searches memos for a matching hash
XRPL service fee paymentVerified
Process service fee payments on XRPL testnet
Claimed on readmehigh confidenceserver.py:198— pay_fee tool validates amount and calls xrpl_client.submit_paymentsrc/xrpl_client.py:174— submit_payment builds and submits an XRPL Payment transaction
AI understands citizen intent and triggers civic workflows (e.g. license renewal)Code-supported
System detects intent through semantic parsing and autonomously executes multi-step civic workflows
Claimed on Devposthigh confidencecreao-build-68fe3686238ad60990e38dcf/src/routes/index.tsx:214— detectIntent is a keyword/substring matcher, not semantic LLM parsingcreao-build-68fe3686238ad60990e38dcf/src/routes/index.tsx:669— comment literally says 'Simulate AI response'; replies are hardcoded strings per intent branch inside a setTimeout, not real workflow execution
Automated blockchain logging of every verified civic actionCode-supported
Every workflow autonomously logs a proof-of-action hash on XRPL as part of the conversation flow
Claimed on Devpostmedium confidencecreao-build-68fe3686238ad60990e38dcf/src/routes/index.tsx:347— useXrplTimestamp and useXrplMintDocumentNft hooks are declared but their mutate functions are never called anywhere else in the file, so the chat/workflow UI never actually triggers an XRPL write
CreaoFileUpload MCP secure document/image/audio uploadCode-supported
CreaoFileUpload MCP provides secure upload for documents, images, and audio
Claimed on Devpostlow confidencecreao-build-68fe3686238ad60990e38dcf/src/components/api/schemas/CreaoFileUpload— generated API client folder exists for CreaoFileUpload, but no code outside that folder references it; actual upload handler only stores the filename locally
CreaoSearch MCP semantic ES|QL civic data searchCode-supported
CreaoSearch MCP performs semantic ES|QL search over civic data
Claimed on Devpostlow confidencecreao-build-68fe3686238ad60990e38dcf/src/components/api/schemas/CreaoSearch/CreaoSearch.ts:10— generated API client class for CreaoSearch exists, but no reference to it was found in routes/hooks outside its own schema folder
Image/vision reasoning on uploaded documents or photos (e.g. road damage, tickets)Code-supported
System integrates image reasoning to interpret uploaded photos (eviction notices, tickets, road damage)
Claimed on Devpostlow confidencecreao-build-68fe3686238ad60990e38dcf/src/routes/index.tsx:786— handleDocumentUpload only appends a chat message with the filename; it never sends the file to a vision API or MCPcreao-build-68fe3686238ad60990e38dcf/src/components/api/schemas/OpenAIGPTVision/OpenAIGPTVision.ts:10— an OpenAIGPTVision API client class exists (generated schema) but is not imported/called anywhere outside its own schema folder
LiveKit real-time two-way voice streamingCode-supported
LiveKit supporting API enables real-time two-way voice streaming
Claimed on Devpostlow confidencecivitasX/app/api/livekit-token/route.ts:19— route generates a real LiveKit AccessToken/JWT via livekit-server-sdk, but no client-side component establishing a LiveKit room connection was found, so the streaming loop is not confirmed end-to-end
LLM-based intent classification (civitasX prototype)Code-supported
Semantic parsing detects citizen intent (e.g. category/service) from natural language
Claimed on Devpostmedium confidencecivitasX/app/api/classify/route.ts:42— classifyWithLLM calls OpenAI/Anthropic/Gemini to classify intent, with keyword fallback classifyIntentByKeywords
OpenAIGPTChat MCP for core citizen dialogue reasoningCode-supported
OpenAIGPTChat MCP provides core reasoning for citizen dialogue
Claimed on Devpostlow confidencecreao-build-68fe3686238ad60990e38dcf/src/components/api/schemas/OpenAIGPTChat/index.ts:5— generated OpenAIGPTChat client exists but chat replies in the main UI are hardcoded strings (see index.tsx line 669), not calls to this client
Built entirely inside Creao with no manual codeClaimed only
CivitasX was built entirely on the Creao agentic platform, completely inside an AI builder, no manual code
Claimed on Devpostmedium confidenceFish Audio speech-to-text / text-to-speechClaimed only
Fish Audio provides speech-to-text and text-to-speech for natural voice conversations
Claimed on Devposthigh confidenceReal speech-to-text / text-to-speech in the citizen chat UIClaimed only
Citizens can talk to the system (voice input/output) as part of the multimodal chat
Claimed on Devposthigh confidencecivitasX/app/api/stt/route.ts:6— getMockTranscript returns a hardcoded string; comment states 'Mock STT transcription'civitasX/app/api/voice/route.ts:8— getMockAudio returns a static base64 silence WAV; comment states 'Mock TTS audio'
X (social media) MCP for real-time civic sentiment retrievalClaimed only
Custom/official X MCP retrieves real-time civic sentiment from social media
Claimed on Devposthigh confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.