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日2:40
追加
search
2026年10月4日2:40
追加
verify
2026年10月4日2:40
追加
payment_collect
2026年10月4日2:40
追加
invoice_issue
2026年10月4日2:40
追加
proof_seal
2026年10月4日2:40
追加
schedule
2026年10月4日2:40
追加
assign
2026年10月4日2:40
追加
job_create
2026年10月4日2:40
追加
intake_classify
2026年10月4日2:40
追加
flow_configure
2026年10月4日2:40
追加
mandate_create
2026年10月4日2:40
追加
compare
2026年10月4日2:40
追加
quote
2026年10月4日2:40
追加
discover
2026年10月4日2:40
追加
intent_match
2026年10月4日2:40