Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Crawler Summary
OpenClaw agent: Automated-Billing-System ⚡ Blessings City Billing (Streamlit‑First) This repository contains an electricity billing system designed to be run **primarily via Streamlit**. It supports: - **Field Engineer** flow: capture meter readings + upload meter photos. - **Admin** flow: validate readings, calculate bills, store bills in Supabase, and confirm payments. --- What you run - **Main app (recommended): Streamlit UI** - Entry point: $1 - Run: py Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.
Freshness
Last checked 2/22/2026
Best For
Contract is available with explicit auth and schema references.
Not Ideal For
Automated-Billing-System is not ideal for teams that need stronger public trust telemetry, lower setup complexity, or more explicit contract coverage before production rollout.
Evidence Sources Checked
editorial-content, capability-contract, runtime-metrics, public facts pack
OpenClaw agent: Automated-Billing-System ⚡ Blessings City Billing (Streamlit‑First) This repository contains an electricity billing system designed to be run **primarily via Streamlit**. It supports: - **Field Engineer** flow: capture meter readings + upload meter photos. - **Admin** flow: validate readings, calculate bills, store bills in Supabase, and confirm payments. --- What you run - **Main app (recommended): Streamlit UI** - Entry point: $1 - Run: py
Public facts
6
Change events
1
Artifacts
0
Freshness
Feb 22, 2026
Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.
Trust score
Unknown
Compatibility
MCP
Freshness
Feb 22, 2026
Vendor
Ktj709
Artifacts
0
Benchmarks
0
Last release
Unpublished
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.
Setup snapshot
git clone https://github.com/ktj709/Automated-Billing-System.gitSetup complexity is MEDIUM. Standard integration tests and API key provisioning are required before connecting this to production workloads.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Ktj709
Protocol compatibility
MCP
Auth modes
mcp, api_key
Machine-readable schemas
OpenAPI or schema references published
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
powershell
cd "D:\Machine Learning Projects\Billing" # ⚡ Blessings City Billing (Streamlit‑First) This repository contains an electricity billing system designed to be run **primarily via Streamlit**. What it gives you: - A **Field Engineer** UI to capture readings + photos. - An **Admin** UI to review readings, calculate bills, store them in Supabase, and mark payments. - Optional backend/API pieces (Flask webhooks, Stripe/WhatsApp integrations, scheduler). If you’re totally new: start with **Quick Start**, then follow the **End‑to‑End Workflow** section to understand how data moves through the system. --- ## Quick start (Windows) ### 1) Python environment
text
### 2) Create `.env` Copy one of these and fill values: - `.env.supabase.example` (recommended) - `.env.example` Minimum required to run with Supabase:
text
Optional integrations (only if you want them):
text
Security rules: - Do not commit `.env`. - Do not commit any JWT tokens (including any local token files). ### 3) Create Supabase tables In Supabase Dashboard → **SQL Editor**, run: - [database/supabase_schema.sql](database/supabase_schema.sql) Then seed a minimal dataset so the Field Engineer dropdown has something to show (example below). ### 4) Run Streamlit
text
Open: http://localhost:8501 --- ## What runs where (components) ### Streamlit (primary UI) - Entry point: [streamlit_app.py](streamlit_app.py) - Roles: - **Field Engineer**: add readings + upload meter photos - **Administrator**: review readings, compute bills, save bills, mark payments ### Supabase (primary database) - Used in “Supabase REST mode” when `SUPABASE_URL` + `SUPABASE_KEY` are set. - Expected tables are the normalized schema in [database/supabase_schema.sql](database/supabase_schema.sql) ### Optional: Flask API - Entry point: [app.py](app.py) - Provides webhook-style endpoints (meter-reading ingestion, Stripe webhook). - Not required for Streamlit workflows. Important: some Flask/API flows are more “reference implementation” than the Streamlit-first path; prefer Streamlit for day-to-day ops. --- ## Supabase setup in detail (beginner-friendly) ### A) Create the schema Run this once in Supabase SQL Editor: - [database/supabase_schema.sql](database/supabase_schema.sql) ### B) Minimal seed data (so the UI has 1 active meter) If you don’t already have real data migrated into Supabase, run a minimal seed like this in Supabase SQL Editor. This creates: - 1 floor - 1 flat type - 1 flat - 1 owner - 1 flat_owner link (required because the UI expects an owner) - 1 meter in `active` status
text
### C) Verify connectivity Run locally:
Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB MCP
Editorial quality
ready
OpenClaw agent: Automated-Billing-System ⚡ Blessings City Billing (Streamlit‑First) This repository contains an electricity billing system designed to be run **primarily via Streamlit**. It supports: - **Field Engineer** flow: capture meter readings + upload meter photos. - **Admin** flow: validate readings, calculate bills, store bills in Supabase, and confirm payments. --- What you run - **Main app (recommended): Streamlit UI** - Entry point: $1 - Run: py
This repository contains an electricity billing system designed to be run primarily via Streamlit.
It supports:
Main app (recommended): Streamlit UI
python -m streamlit run streamlit_app.pyOptional: Flask API
To protect historical data, the backend prevents any new bill insert whose:
billing_period_end is in Nov 2025 (2025-11-xx)This is enforced for:
DatabaseService.create_bill)DatabaseService.generate_bills_for_month)Re-verify lock (read-only): python -m scripts.verify_supabase_november
Supabase enforces a unique constraint on:
(flat_id, billing_period_start)If a new bill would collide, the system does not overwrite the existing record. It retries the insert with an alternate billing_period_start (moved forward) so the new bill is stored as a separate row.
In the Admin billing workflow (Step 6/7), the reading you enter is treated as absolute monthly consumption (units for that period). It is not computed as current - previous.
Note: the readings ingestion path can still compute a consumption field from historical readings for the same meter. Some legacy/imported rows may have consumption <= 0, and UI estimates may fall back to the raw reading value.
The system uses an explicit formula-based bill:
$$\text{total_amount} = (\text{flat_units} + \text{water_motor_share})\times \text{rate_per_unit} + \text{fixed_charge} + \text{previous_outstanding}$$
Pricing lookup is in services/pricing_service.py.
data/Blessings_City_Master_Data.xlsx (by flat code like B17-FF).12.0 when not found.C14-SF, D3-SF, D4-SFIf the identifier includes a prefix like 5BHK-B17-FF, fixed charge is overridden by BHK count:
231118901474The 9₹ rule always wins (fixed forced to 0).
Optional integrations:
cd "D:\Machine Learning Projects\Billing"
# ⚡ Blessings City Billing (Streamlit‑First)
This repository contains an electricity billing system designed to be run **primarily via Streamlit**.
What it gives you:
- A **Field Engineer** UI to capture readings + photos.
- An **Admin** UI to review readings, calculate bills, store them in Supabase, and mark payments.
- Optional backend/API pieces (Flask webhooks, Stripe/WhatsApp integrations, scheduler).
If you’re totally new: start with **Quick Start**, then follow the **End‑to‑End Workflow** section to understand how data moves through the system.
---
## Quick start (Windows)
### 1) Python environment
```powershell
cd "D:\Machine Learning Projects\Billing"
python -m venv venv
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
.envCopy one of these and fill values:
.env.supabase.example (recommended).env.exampleMinimum required to run with Supabase:
SUPABASE_URL=https://<your-project-ref>.supabase.co
SUPABASE_KEY=<your-service-role-key-or-anon-key>
Optional integrations (only if you want them):
# AI (optional)
OPENAI_API_KEY=sk-...
# Discord (optional)
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
# Cloudinary (optional)
CLOUDINARY_URL=cloudinary://<api_key>:<api_secret>@<cloud_name>
CLOUDINARY_UPLOAD_PRESET=<unsigned_preset_if_using_unsigned_upload>
# Stripe (optional)
STRIPE_API_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
# WhatsApp (optional)
WHATSAPP_PHONE_NUMBER_ID=...
WHATSAPP_ACCESS_TOKEN=...
# Auth0 (optional)
AUTH0_DOMAIN=your-tenant.us.auth0.com
AUTH0_API_IDENTIFIER=https://billing-api.example.com
# Simple header token (optional, used by Flask API)
HEADER_AUTH_TOKEN=your-dev-token
Security rules:
.env.In Supabase Dashboard → SQL Editor, run:
Then seed a minimal dataset so the Field Engineer dropdown has something to show (example below).
.\venv\Scripts\Activate.ps1
python -m streamlit run streamlit_app.py
Open: http://localhost:8501
SUPABASE_URL + SUPABASE_KEY are set.Important: some Flask/API flows are more “reference implementation” than the Streamlit-first path; prefer Streamlit for day-to-day ops.
Run this once in Supabase SQL Editor:
If you don’t already have real data migrated into Supabase, run a minimal seed like this in Supabase SQL Editor.
This creates:
active statusinsert into public.floors (code, name)
values ('FF', 'First Floor')
on conflict (code) do nothing;
insert into public.flat_types (name)
values ('2BHK')
on conflict (name) do nothing;
insert into public.flats (code, floor_id, type_id)
select
'B17-FF',
(select id from public.floors where code = 'FF'),
(select id from public.flat_types where name = '2BHK')
on conflict (code) do nothing;
insert into public.owners (name, phone)
values ('Test Owner', '+910000000000')
returning id;
insert into public.flat_owners (flat_id, owner_id, is_primary)
select
(select id from public.flats where code = 'B17-FF'),
(select id from public.owners where name = 'Test Owner' order by id desc limit 1),
true;
insert into public.meters (meter_number, flat_id, status)
select
'19152159',
(select id from public.flats where code = 'B17-FF'),
'active'
on conflict (meter_number) do nothing;
Run locally:
python scripts\verify_migration.py
This section explains the real operational flow: Field Engineer → Admin → database.
Where: Field Engineer Dashboard in streamlit_app.py
What the engineer does:
meters → flats → owners)What happens in the backend when you submit:
readings via DatabaseService.insert_meter_reading.consumption = current_reading_value - previous_reading_value (based on the previous reading in readings for that meter).Photo handling:
data/meter_photos/.CLOUDINARY_URL and optionally CLOUDINARY_UPLOAD_PRESET), the photo is also uploaded.data/meter_photo_links.json so the Admin screen can show photos next to readings.Motor meter lookup (optional):
flat_motors + motors + a motor-linked meters.motor_id, the Field Engineer screen attempts to show the motor meter number.Where: Administrator Login in streamlit_app.py
How auth behaves:
AUTH0_DOMAIN + AUTH0_API_IDENTIFIER and python-jose is installed), the JWT is verified against Auth0.auth0|...There are two supported ways to get a token for testing.
Option A (recommended, interactive):
python get_auth0_token.py
Option B (simple, env-based):
.env (do not commit this file):AUTH0_DOMAIN=your-tenant.us.auth0.com
AUTH0_API_IDENTIFIER=https://billing-api.example.com
AUTH0_M2M_CLIENT_ID=...
AUTH0_M2M_CLIENT_SECRET=...
python get_token_simple.py
By default it also writes the token to auth0_token.txt for convenience (this repo ignores that file so it won’t be pushed).
Where: Administrator dashboard in streamlit_app.py
What the admin does:
Key internal steps:
readings.bills.flat_reading_id / bills.motor_reading_id).Pricing is resolved by services/pricing_service.py:
data/Blessings_City_Master_Data.xlsx (if present) to get:
rate_per_unitfixed_chargeC14-SF, D3-SF, D4-SF → rate 9 and fixed forced to 05BHK-B17-FF):
Bill arithmetic is in services/tariff_rules.py.
Current formula used by the “simple” calculator:
$$\text{total_amount} = (\text{flat_units} + \text{water_motor_share})\times \text{rate_per_unit} + \text{fixed_charge} + \text{previous_outstanding}$$
Important semantics:
Bills are inserted via DatabaseService.create_bill.
Business-critical protections:
November 2025 is locked
billing_period_end falls in Nov 2025 is blocked.Verification script (read-only):
python -m scripts.verify_supabase_novemberBills are never overwritten
(flat_id, billing_period_start).billing_period_start so the new bill becomes a separate row.Admin can:
paid (updates bills.status).DISCORD_WEBHOOK_URL is configured.notifications table.The Admin “Generate Monthly Bills” button calls a Supabase RPC:
rpc('generate_bills_for_month', {p_billing_period_start, p_billing_period_end, p_due_date})This requires you to create a database function named generate_bills_for_month in your Supabase project.
Note: this repo does not currently ship an authoritative SQL implementation of that function because bill computation uses Python pricing + business rules. Many teams implement this RPC server-side in SQL, or replace it with a Python-side batch job.
If you don’t have the RPC yet, you can still run the system fully by generating bills from the Admin workflow (per reading).
Run:
.\venv\Scripts\Activate.ps1
python app.py
Endpoints:
POST /webhook/meter-reading – accepts a reading payload, validates, bills, sends notificationsPOST /webhook/stripe – Stripe webhook → marks bill paid + logs payment_eventsGET /healthAuthentication:
HEADER_AUTH_TOKEN bearer token, OR Auth0 JWT verification.Important:
customer_id on bills) that do not exist in the normalized Supabase bills table.The scheduler in services/scheduler_service.py uses APScheduler to run recurring jobs (monthly bill generation, reminders, overdue marking).
Status:
data/Blessings_City_Master_Data.xlsx
data/meter_photos/
data/meter_photo_links.json
data/meter_registry.json
meters/flats exist: python scripts\verify_migration.pypython -m scripts.verify_supabase_novemberpython test_tariff.pypython test_stripe.pypython test_discord.pypython test_whatsapp.pypython verify_token.py.\venv\Scripts\Activate.ps1
python -m streamlit run streamlit_app.py
meters (or they are not status = 'active').flat_owners), because the active-meter query uses joins.Common reasons:
flat_id)(flat_id, billing_period_start) (auto-retried with alternate start)python -m pip install cloudinaryCLOUDINARY_URL is setCLOUDINARY_UPLOAD_PRESET is setMachine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
ready
Auth
mcp, api_key
Streaming
Yes
Data region
global
Protocol support
Requires: mcp, lang:typescript, streaming
Forbidden: high_risk
Guardrails
Operational confidence: medium
curl -s "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/snapshot"
curl -s "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/contract"
curl -s "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
80
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
74
Expose OpenAPI definition endpoints as MCP tools using the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Rank
72
An actix_web backend for the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Contract JSON
{
"contractStatus": "ready",
"authModes": [
"mcp",
"api_key"
],
"requires": [
"mcp",
"lang:typescript",
"streaming"
],
"forbidden": [
"high_risk"
],
"supportsMcp": true,
"supportsA2a": false,
"supportsStreaming": true,
"inputSchemaRef": "https://github.com/ktj709/Automated-Billing-System#input",
"outputSchemaRef": "https://github.com/ktj709/Automated-Billing-System#output",
"dataRegion": "global",
"contractUpdatedAt": "2026-02-24T19:46:22.774Z",
"sourceUpdatedAt": "2026-02-24T19:46:22.774Z",
"freshnessSeconds": 4421990
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"MCP"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_MCP",
"generatedAt": "2026-04-17T00:06:13.448Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "MCP",
"type": "protocol",
"support": "supported",
"confidenceSource": "contract",
"notes": "Confirmed by capability contract"
}
],
"flattenedTokens": "protocol:MCP|supported|contract"
}Facts JSON
[
{
"factKey": "docs_crawl",
"category": "integration",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "MCP",
"href": "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:46:22.774Z",
"isPublic": true
},
{
"factKey": "auth_modes",
"category": "compatibility",
"label": "Auth modes",
"value": "mcp, api_key",
"href": "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:46:22.774Z",
"isPublic": true
},
{
"factKey": "schema_refs",
"category": "artifact",
"label": "Machine-readable schemas",
"value": "OpenAPI or schema references published",
"href": "https://github.com/ktj709/Automated-Billing-System#input",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:46:22.774Z",
"isPublic": true
},
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Ktj709",
"href": "https://github.com/ktj709/Automated-Billing-System",
"sourceUrl": "https://github.com/ktj709/Automated-Billing-System",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-02-24T19:43:14.176Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-ktj709-automated-billing-system/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub · GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
}
]Sponsored
Ads related to Automated-Billing-System and adjacent AI workflows.