baatjie-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for HTTP transport. | 3000 |
| TANOS_URL | Yes | The URL of the tanOS Supabase project. | |
| TRANSPORT | No | Transport mode: 'stdio' or 'http'. | stdio |
| SIGSCHE_URL | Yes | The URL of the sigscheCore Supabase project. | |
| TANOS_SERVICE_KEY | Yes | The service role key for tanOS. | |
| SIGSCHE_SERVICE_KEY | Yes | The service role key for sigscheCore. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| baatjie_describe_schemaA | List every table reachable through this server, with row counts and column names. Call this first when you are unsure which table or column to use. It is the cheapest way to orient before querying. Args:
Returns: { "projects": { "tanos": { "tables": [{ "name": string, "columns": string[] }] }, "sigsche": { "tables": [...] } } } tanOS tables: Property: landlords, properties, rooms, tenants, foreign_nationals, leases, lease_agreements, payments, maintenance, notices Commercial: locare_accounts, brms, agents, employers, policies, daily_activity Internal: todos, ai_agents, audit_log sigscheCore tables: profiles, queue_items, library_items, brand_cards, registration_status |
| baatjie_queryA | Read rows from any table in tanOS or sigscheCore, with filtering, column selection, ordering and pagination. This is the general-purpose read. For sequencing work prefer baatjie_next_actions, and for the ops snapshot prefer baatjie_dashboard — both are cheaper and better shaped. Personal identifiers (ID numbers, passport numbers, phone, email, banking details) are withheld unless include_pii is true, and the response reports which fields were withheld. Args:
Returns: { "total": number, "count": number, "offset": number, "items": object[], "has_more": boolean, "next_offset"?: number, "redacted_fields": string[] } Examples:
Error Handling:
tanOS tables: Property: landlords, properties, rooms, tenants, foreign_nationals, leases, lease_agreements, payments, maintenance, notices Commercial: locare_accounts, brms, agents, employers, policies, daily_activity Internal: todos, ai_agents, audit_log sigscheCore tables: profiles, queue_items, library_items, brand_cards, registration_status |
| baatjie_insertA | Insert one or more rows into any table in tanOS or sigscheCore. Every insert is recorded in tanOS audit_log with the actor you supply. Args:
Returns: { "ok": true, "table": string, "action": "insert", "affected": number, "rows": object[], "audit_logged": boolean, "note"?: string } Examples:
Note: writes to occupant-facing tables (tenants, leases, notices, payments) are flagged in the response, because a row there corresponds to a real person's tenancy or money. A 'notices' row in particular represents a notice served on an occupant — South African arrears and eviction notices carry statutory requirements, so route the wording through your legal-exposure-check skill before sending rather than after. Error Handling:
|
| baatjie_updateA | Update rows matching a filter, in any table in either system. At least one filter is required — an unfiltered update is refused rather than rewriting the whole table. Recorded in tanOS audit_log. Args:
Returns: { "ok": true, "table": string, "action": "update", "affected": number, "rows": object[], "audit_logged": boolean } Examples:
Error Handling:
|
| baatjie_deleteA | Permanently delete rows matching a filter. Requires confirm=true and at least one filter. Recorded in tanOS audit_log. Deletes are irreversible and there is no soft-delete on these tables. Prefer a status change (baatjie_update) over deletion wherever the schema has a status column — the ledger is append-only by design, and payment corrections belong as compensating rows rather than deletions. Args:
Returns: { "ok": true, "table": string, "action": "delete", "affected": number, "audit_logged": boolean } Error Handling:
|
| baatjie_next_actionsA | Return the todos that are genuinely startable right now — every blocker done — ranked by how much each one unblocks downstream. This is the tool to reach for when asked "what should I do next", "what's the priority", or "what's blocking us". A raw todo list hides the fact that most items cannot be started; this one answers the question the list is standing in for. Args:
Returns: { "startable": [{ "id","title","priority","track","wave","effort","unblocks" }], "blocked_count": number, "roots": [...], // startable items that unblock the most "summary": { "total","startable","blocked","by_priority": {...} } } Examples:
Error Handling:
|
| baatjie_list_todosA | List todos with their wave, track, effort, blocker count and unblock count. Use this for a full picture of the board. For "what do I do next", baatjie_next_actions is the better tool because it filters to what is actually actionable. Args:
Returns: { "total","count","offset","items":[...],"has_more","next_offset"? } where each item carries id, title, priority, status, wave, track, effort, open_blockers, startable and unblocks. Examples:
|
| baatjie_create_todoA | Add a todo to the tanOS action plan, optionally with sequencing metadata. Args:
Returns: { "ok": true, "todo": { "id","title",... }, "audit_logged": boolean } Examples:
|
| baatjie_update_todoA | Change a todo's status or sequencing metadata by id. Marking an item done automatically unblocks anything that listed it in blocked_by — the dependency graph is recomputed on read, so the next call to baatjie_next_actions will surface newly available work. Args:
Returns: { "ok": true, "todo": {...}, "newly_unblocked": [{ "id","title" }], "audit_logged": boolean } Examples:
|
| baatjie_dashboardA | One call for the whole operational picture: row counts across every tanOS table, the sales position against the 26/day objective, and where the clock sits in the BDOP day (phase, 33/22 sprint block, next angel window). This is the cheapest way to orient at the start of a session or a sprint. It replaces roughly a dozen separate count queries. Args:
Returns: { "counts": { "": number | null }, "sales": { "accounts_signed": number, "daily_target": 26, "brms": number, "agent_pool": number, "employer_pool": number, "inherited_book": number }, "property": { "landlords","properties","rooms","tenants","leases", "payments","notices","maintenance" }, "clock": { "phase","sprint","block","minutes_left","next_angel_window" } } Examples:
Error Handling:
|
| baatjie_pipelineA | Roll up sales performance per Business Relationship Manager: inherited book size, agencies signed, and logged outreach/demo/sale activity. Answers "who is performing", "where is the pipeline", and "are we hitting 26/day". Args:
Returns: { "brms": [{ "brm_id","inherited_book_size","accounts_signed", "outreach","demos","sales" }], "totals": { "accounts_signed","outreach","demos","sales","brm_count" }, "against_target": { "daily_target": 26, "signed_today": number, "gap": number } } Examples:
Error Handling:
|
| baatjie_log_activityA | Record a BRM's outreach, demos and sales for a 33/22 sprint block. This is how the daily 26/day objective gets measured — unlogged work is invisible to baatjie_pipeline. Args:
Returns: { "ok": true, "activity": {...}, "clock": {...}, "audit_logged": boolean } Examples:
|
| baatjie_arrearsA | Identify active leases with no recent payment, ranked by days since last payment, alongside how many notices have already been sent on each. Read-only. It reports the position; it does not send anything. Serving a notice is a separate, deliberate act — in South Africa arrears and eviction notices carry statutory requirements under the Rental Housing Act and PIE Act, so wording and timing should be checked before anything reaches an occupant. Args:
Returns: { "leases": [{ "lease_id","room_id","rent_due_day","status", "last_payment_date","days_since_payment","total_paid","notices_sent" }], "summary": { "active_leases","in_arrears","never_paid","total_notices_sent" } } Examples:
Error Handling:
|
| baatjie_signal_queueA | List scheduled, sent and failed posts in the sigscheCore broadcast queue, optionally filtered by brand, status or date. Args:
Returns: { "total","count","offset","items":[{ "id","brand_name","scheduled_date", "scheduled_time","angel_label","platforms","status","caption","is_ad" }], "has_more","next_offset"? } Examples:
|
| baatjie_schedule_signalA | Queue a post or ad for broadcast across platforms, with angel-window awareness. If the scheduled time matches one of the reserved windows (08:17, 11:11, 13:13, 22:22) the angel label is set automatically and reported back. Times outside those windows are accepted without complaint — the label is simply null. Args:
Returns: { "ok": true, "item": {...}, "angel_label": string | null, "audit_logged": boolean } Examples:
Error Handling:
|
| baatjie_brand_snapshotA | Per-brand status across sigscheCore: platform registration progress, queued and sent counts, library depth and how many brand cards exist. Answers "is this brand ready to broadcast" and "where are we still unregistered". Args:
Returns: { "brands": [{ "brand_id","queued","sent","failed","library_items", "brand_cards","platforms_registered","platforms_pending" }], "totals": { "brands","queued","sent","registered" } } Examples:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dantalan/baatjie-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server