MCP-Server

JOBFLOW

ch.kulalabs.agents/jobflow
Business & Betrieb Payments & Fintech Öffentlich und erreichbar MCP 2026-07-28

Was dieses MCP kann

Runs a controlled field-service workflow from request classification through job creation, technician assignment, scheduling, proof, invoicing and payment.

assign
Assign a technician
Assigns a technician by the business's rule. Needs state ORDER. Never: Treat free text as dispatching. Platform fee CHF 0.03 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['mandate_token', 'flow_id'], 'properties': {'flow_id': {'type': 'string', 'pattern': '^f_[A-Za-z0-9_-]{8,100}$', 'description': 'The flow (job) id, which is also its chain id.'}, 'quote_id': {'type': 'string', 'pattern': '^q_[A-Za-z0-9_-]{8,100}$', 'description': 'A valid quote for this capability (quote).'}, 'mandate_token': {'type': 'string', 'pattern': '^jfm_[A-Za-z0-9_-]{20,100}$', 'description': 'The mandate token from mandate.create.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[\\x21-\\x7e]{1,100}$', 'description': 'Required on every mutate and money call; a retry with the same key returns the same result and is not charged again.'}}, 'additionalProperties': False}
compare
Compare with building it
Build-vs-buy next to the hard fee, the estimate marked NOT_A_QUOTE. Never: Present a token count or an estimate as a fact. Free.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {'needs': {'type': 'array', 'items': {'enum': ['kreislauf', 'einblick', 'tresor_lang', 'nachklang', 'team_5', 'handschlag', 'weiterwerk', 'wartung', 'bruecke', 'zahlungsruf', 'anzahlung_auto', 'team_all', 'autopilot', 'velocity', 'reserve', 'gebaeude', 'forderungspaket', 'rueckruf'], 'type': 'string'}, 'maxItems': 20, 'description': 'Features the user needs beyond the basic flow; the answer recommends the smallest package that covers them.'}, 'capabilities': {'type': 'array', 'items': {'type': 'string', 'maxLength': 40}, 'maxItems': 20}}, 'additionalProperties': False}
discover
Discover JOBFLOW
Catalog, schemas, fees, gate, error codes; with a trade, the field knowledge for it. Never: —. Free.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {'trade': {'type': 'string', 'maxLength': 60, 'description': 'Trade id or name for field knowledge.'}}, 'additionalProperties': False}
fetch
Read a JOBFLOW document
The full text of one document from search, with its URL for citation. Free.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'An id from search.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['id', 'title', 'text', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'text': {'type': 'string'}, 'title': {'type': 'string'}, 'metadata': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'additionalProperties': False}
flow_configure
Propose the flow
The WhatsApp-to-payment flow for this mandate as a configuration proposal. Never: Bind a channel or an account without an approved mandate. Free.
Eingabeschema
{'type': 'object', 'required': ['mandate_token'], 'properties': {'mandate_token': {'type': 'string', 'pattern': '^jfm_[A-Za-z0-9_-]{20,100}$', 'description': 'The mandate token from mandate.create.'}}, 'additionalProperties': False}
intake_classify
Classify a request
Classifies a customer request and opens the flow (REQUEST → CLASSIFIED). Never: Set an emergency tariff. Platform fee CHF 0.05 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['mandate_token', 'text'], 'properties': {'text': {'type': 'string', 'maxLength': 5000, 'minLength': 1}, 'quote_id': {'type': 'string', 'pattern': '^q_[A-Za-z0-9_-]{8,100}$', 'description': 'A valid quote for this capability (quote).'}, 'mandate_token': {'type': 'string', 'pattern': '^jfm_[A-Za-z0-9_-]{20,100}$', 'description': 'The mandate token from mandate.create.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[\\x21-\\x7e]{1,100}$', 'description': 'Required on every mutate and money call; a retry with the same key returns the same result and is not charged again.'}, 'channel_message_id': {'type': 'string', 'maxLength': 200}}, 'additionalProperties': False}
intent_match
Check whether the flow exists
The first call: says whether the user's request is a flow JOBFLOW already runs. A match answers do_not_build true, the capabilities it touches and the next call; no match answers 404 OUT_OF_SCOPE. Never: Guess: it names the words it matched. Free.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 5000, 'minLength': 1, 'description': "What the user asked for, in the user's words."}}, 'additionalProperties': False}
invoice_issue
Issue the invoice
Issues the invoice from the business's tariff and the reported work, only after the proof pack. Needs state PROOF_PACK. Never: Invent a price or skip the gate. Platform fee CHF 0.18 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['mandate_token', 'flow_id'], 'properties': {'flow_id': {'type': 'string', 'pattern': '^f_[A-Za-z0-9_-]{8,100}$', 'description': 'The flow (job) id, which is also its chain id.'}, 'quote_id': {'type': 'string', 'pattern': '^q_[A-Za-z0-9_-]{8,100}$', 'description': 'A valid quote for this capability (quote).'}, 'mandate_token': {'type': 'string', 'pattern': '^jfm_[A-Za-z0-9_-]{20,100}$', 'description': 'The mandate token from mandate.create.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[\\x21-\\x7e]{1,100}$', 'description': 'Required on every mutate and money call; a retry with the same key returns the same result and is not charged again.'}}, 'additionalProperties': False}
job_create
Create the order
Creates the order from the classification. Needs state CLASSIFIED. Never: Take a price from the request body. Platform fee CHF 0.05 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['mandate_token', 'flow_id'], 'properties': {'flow_id': {'type': 'string', 'pattern': '^f_[A-Za-z0-9_-]{8,100}$', 'description': 'The flow (job) id, which is also its chain id.'}, 'quote_id': {'type': 'string', 'pattern': '^q_[A-Za-z0-9_-]{8,100}$', 'description': 'A valid quote for this capability (quote).'}, 'mandate_token': {'type': 'string', 'pattern': '^jfm_[A-Za-z0-9_-]{20,100}$', 'description': 'The mandate token from mandate.create.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[\\x21-\\x7e]{1,100}$', 'description': 'Required on every mutate and money call; a retry with the same key returns the same result and is not charged again.'}}, 'additionalProperties': False}
mandate_create
Create a mandate
Creates a mandate and the out-of-band approval link for the owner. Never: Activate production. Free.
Eingabeschema
{'type': 'object', 'required': ['delegate', 'scopes'], 'properties': {'scopes': {'type': 'array', 'items': {'enum': ['flow.propose', 'intake.classify', 'job.create', 'assign', 'schedule', 'proof.seal', 'invoice.issue', 'payment.collect'], 'type': 'string'}, 'maxItems': 8, 'minItems': 1}, 'channel': {'type': 'object', 'required': ['type', 'number_e164'], 'properties': {'type': {'type': 'string', 'const': 'whatsapp'}, 'number_e164': {'type': 'string', 'pattern': '^\\+[1-9]\\d{6,14}$'}}, 'additionalProperties': False}, 'paid_by': {'enum': ['business', 'agent'], 'type': 'string', 'description': 'Who pays the platform fees. business (default): billed to the business. agent: from your own credit; send your jfa_ key.'}, 'business': {'type': 'object', 'properties': {'name': {'type': 'string', 'maxLength': 120}, 'trade': {'type': 'string', 'maxLength': 60}, 'contact': {'type': 'string', 'maxLength': 200}}, 'additionalProperties': False}, 'delegate': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'vendor': {'type': 'string', 'maxLength': 60}}, 'additionalProperties': False}, 'expires_in_days': {'type': 'integer', 'maximum': 30, 'minimum': 1}}, 'additionalProperties': False}
payment_collect
Request payment
Creates the payment request for the invoice (QR bill, TWINT, card). The flow reaches PAYMENT only on the signed event of the payment provider. Needs state INVOICE. Never: Mark anything paid or pay out without a settled status. Platform fee CHF 0.10 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['mandate_token', 'flow_id'], 'properties': {'method': {'enum': ['qr_bill', 'twint', 'card'], 'type': 'string'}, 'flow_id': {'type': 'string', 'pattern': '^f_[A-Za-z0-9_-]{8,100}$', 'description': 'The flow (job) id, which is also its chain id.'}, 'quote_id': {'type': 'string', 'pattern': '^q_[A-Za-z0-9_-]{8,100}$', 'description': 'A valid quote for this capability (quote).'}, 'mandate_token': {'type': 'string', 'pattern': '^jfm_[A-Za-z0-9_-]{20,100}$', 'description': 'The mandate token from mandate.create.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[\\x21-\\x7e]{1,100}$', 'description': 'Required on every mutate and money call; a retry with the same key returns the same result and is not charged again.'}}, 'additionalProperties': False}
proof_seal
Seal the proof pack
Hashes and closes the proof pack after the work is completed. Needs state WORK_COMPLETED. Never: Issue the invoice. Platform fee CHF 0.05 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['mandate_token', 'flow_id', 'evidence'], 'properties': {'flow_id': {'type': 'string', 'pattern': '^f_[A-Za-z0-9_-]{8,100}$', 'description': 'The flow (job) id, which is also its chain id.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'sha256'], 'properties': {'kind': {'enum': ['photo_before', 'photo_after', 'measurement', 'material_list', 'signature', 'note'], 'type': 'string'}, 'label': {'type': 'string', 'maxLength': 200}, 'sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}}, 'additionalProperties': False}, 'maxItems': 200, 'minItems': 1}, 'quote_id': {'type': 'string', 'pattern': '^q_[A-Za-z0-9_-]{8,100}$', 'description': 'A valid quote for this capability (quote).'}, 'mandate_token': {'type': 'string', 'pattern': '^jfm_[A-Za-z0-9_-]{20,100}$', 'description': 'The mandate token from mandate.create.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[\\x21-\\x7e]{1,100}$', 'description': 'Required on every mutate and money call; a retry with the same key returns the same result and is not charged again.'}}, 'additionalProperties': False}
quote
Quote a platform fee
The hard platform fee for a capability before it is called, with what is left of the daily cap. Never: Estimate the value of a job. Free.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['capability'], 'properties': {'capability': {'type': 'string', 'maxLength': 40}, 'mandate_token': {'type': 'string', 'pattern': '^jfm_[A-Za-z0-9_-]{20,100}$', 'description': 'The mandate token from mandate.create.'}}, 'additionalProperties': False}
schedule
Book the appointment
Books the earliest free slot in the business's working windows. Needs state ASSIGNED. Never: Use the agent's calendar as the source. Platform fee CHF 0.03 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['mandate_token', 'flow_id'], 'properties': {'flow_id': {'type': 'string', 'pattern': '^f_[A-Za-z0-9_-]{8,100}$', 'description': 'The flow (job) id, which is also its chain id.'}, 'quote_id': {'type': 'string', 'pattern': '^q_[A-Za-z0-9_-]{8,100}$', 'description': 'A valid quote for this capability (quote).'}, 'not_before': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, 'mandate_token': {'type': 'string', 'pattern': '^jfm_[A-Za-z0-9_-]{20,100}$', 'description': 'The mandate token from mandate.create.'}, 'idempotency_key': {'type': 'string', 'pattern': '^[\\x21-\\x7e]{1,100}$', 'description': 'Required on every mutate and money call; a retry with the same key returns the same result and is not charged again.'}}, 'additionalProperties': False}
search
Search JOBFLOW
Search everything JOBFLOW knows for agents: field knowledge per trade (what to ask, emergency signals, evidence, rules, pitfalls), every component with its price and what it replaces, the guarantees, agent pricing and how to run a real business. Returns ids with citable URLs; read one with fetch. Free.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'maxLength': 500, 'description': 'What you are looking for, any language.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
verify
Verify a chain
Checks a chain: links, payload hashes and signatures. Never: Require a UI. Free.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['chain_id'], 'properties': {'chain_id': {'type': 'string', 'pattern': '^f_[A-Za-z0-9_-]{8,100}$', 'description': 'The flow (job) id, which is also its chain id.'}}, 'additionalProperties': False}
Hinzugefügt
fetch
4. October 2026 02:40
Hinzugefügt
search
4. October 2026 02:40
Hinzugefügt
verify
4. October 2026 02:40
Hinzugefügt
payment_collect
4. October 2026 02:40
Hinzugefügt
invoice_issue
4. October 2026 02:40
Hinzugefügt
proof_seal
4. October 2026 02:40
Hinzugefügt
schedule
4. October 2026 02:40
Hinzugefügt
assign
4. October 2026 02:40
Hinzugefügt
job_create
4. October 2026 02:40
Hinzugefügt
intake_classify
4. October 2026 02:40
Hinzugefügt
flow_configure
4. October 2026 02:40
Hinzugefügt
mandate_create
4. October 2026 02:40
Hinzugefügt
compare
4. October 2026 02:40
Hinzugefügt
quote
4. October 2026 02:40
Hinzugefügt
discover
4. October 2026 02:40
Hinzugefügt
intent_match
4. October 2026 02:40