MCP 服务器

JOBFLOW

ch.kulalabs.agents/jobflow
商业与运营 支付与金融科技 公开且可连接 MCP 2026-07-28

此 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.
幂等
输入模式
{'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.
只读 幂等
输入模式
{'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.
只读 幂等
输入模式
{'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.
只读 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'An id from search.'}}, 'additionalProperties': False}
输出模式
{'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.
输入模式
{'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.
幂等
输入模式
{'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.
只读 幂等
输入模式
{'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.
幂等
输入模式
{'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.
幂等
输入模式
{'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.
输入模式
{'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.
可访问外部资源 幂等
输入模式
{'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.
幂等
输入模式
{'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.
只读 幂等
输入模式
{'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.
幂等
输入模式
{'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.
只读 幂等
输入模式
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'maxLength': 500, 'description': 'What you are looking for, any language.'}}, 'additionalProperties': False}
输出模式
{'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.
只读 幂等
输入模式
{'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}
已添加
fetch
2026年10月4日 02:40
已添加
search
2026年10月4日 02:40
已添加
verify
2026年10月4日 02:40
已添加
payment_collect
2026年10月4日 02:40
已添加
invoice_issue
2026年10月4日 02:40
已添加
proof_seal
2026年10月4日 02:40
已添加
schedule
2026年10月4日 02:40
已添加
assign
2026年10月4日 02:40
已添加
job_create
2026年10月4日 02:40
已添加
intake_classify
2026年10月4日 02:40
已添加
flow_configure
2026年10月4日 02:40
已添加
mandate_create
2026年10月4日 02:40
已添加
compare
2026年10月4日 02:40
已添加
quote
2026年10月4日 02:40
已添加
discover
2026年10月4日 02:40
已添加
intent_match
2026年10月4日 02:40