Servidor MCP

JOBFLOW

ch.kulalabs.agents/jobflow
Negocio y operaciones Pagos y fintech Público y accesible MCP 2026-07-28

Qué hace este MCP

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.
Idempotente
Esquema de entrada
{'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.
Solo lectura Idempotente
Esquema de entrada
{'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.
Solo lectura Idempotente
Esquema de entrada
{'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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'An id from search.'}}, 'additionalProperties': False}
Esquema de salida
{'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.
Esquema de entrada
{'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.
Idempotente
Esquema de entrada
{'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.
Solo lectura Idempotente
Esquema de entrada
{'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.
Idempotente
Esquema de entrada
{'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.
Idempotente
Esquema de entrada
{'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.
Esquema de entrada
{'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.
Acceso externo Idempotente
Esquema de entrada
{'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.
Idempotente
Esquema de entrada
{'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.
Solo lectura Idempotente
Esquema de entrada
{'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.
Idempotente
Esquema de entrada
{'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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'maxLength': 500, 'description': 'What you are looking for, any language.'}}, 'additionalProperties': False}
Esquema de salida
{'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.
Solo lectura Idempotente
Esquema de entrada
{'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}
Añadido
fetch
4 de October de 2026 a las 02:40
Añadido
search
4 de October de 2026 a las 02:40
Añadido
verify
4 de October de 2026 a las 02:40
Añadido
payment_collect
4 de October de 2026 a las 02:40
Añadido
invoice_issue
4 de October de 2026 a las 02:40
Añadido
proof_seal
4 de October de 2026 a las 02:40
Añadido
schedule
4 de October de 2026 a las 02:40
Añadido
assign
4 de October de 2026 a las 02:40
Añadido
job_create
4 de October de 2026 a las 02:40
Añadido
intake_classify
4 de October de 2026 a las 02:40
Añadido
flow_configure
4 de October de 2026 a las 02:40
Añadido
mandate_create
4 de October de 2026 a las 02:40
Añadido
compare
4 de October de 2026 a las 02:40
Añadido
quote
4 de October de 2026 a las 02:40
Añadido
discover
4 de October de 2026 a las 02:40
Añadido
intent_match
4 de October de 2026 a las 02:40