{"x402Version":2,"service":"HALOWERK modellwerk","version":"1.0.0","network":"eip155:8453","network_name":"Base Mainnet","chain_id":8453,"recipient":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","asset":{"symbol":"USDC","address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","decimals":6},"facilitators":["CDP","https://facilitator.xpay.sh"],"payment_headers":{"primary":"PAYMENT-SIGNATURE","accepted":["PAYMENT-SIGNATURE","X-Payment","PAYMENT"],"challenge":["PAYMENT-REQUIRED"],"response":["PAYMENT-RESPONSE"]},"resources":[{"url":"https://modell.halowerk.com/v1/llm-catalog","method":"POST","name":"llm_catalog","description":"A comparison table of language models: input, output and cache prices per million tokens, context window, maximum output length, batch discount and a short note on what each is suited to. Filter by vendor, by a maximum price, by the context window you need, or by capability tag. Every row carries the date its prices were last checked, so a stale figure is visible rather than silently wrong. This is a curated table, not a live vendor query: prices are the publicly published list rates and negotiated or promotional rates are not represented. Availability, rate limits per account and regional restrictions are not covered — they depend on your contract, not on the model.","summary":"List language models with prices per million tokens, context window, maximum output and batch discount, filtered by vendor, price ceiling or context requirement.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"vendor":{"type":"string","maxLength":64,"description":"Only models from this vendor, e.g. anthropic, openai, google."},"max_input_price":{"type":"number","minimum":0,"description":"Only models at or below this input price per million tokens."},"max_output_price":{"type":"number","minimum":0,"description":"Only models at or below this output price per million tokens."},"min_context":{"type":"integer","minimum":0,"description":"Only models whose context window is at least this many tokens."},"min_output":{"type":"integer","minimum":0,"description":"Only models able to emit at least this many output tokens."},"tag":{"type":"string","maxLength":40,"description":"Only models carrying this capability tag, e.g. coding, speed, reasoning, cheap."},"sort":{"type":"string","enum":["input_price","output_price","context","vendor"],"default":"output_price","description":"Sort order."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://modell.halowerk.com/v1/model-router","method":"POST","name":"model_router","description":"Scores every catalogue model against one task and returns a ranked shortlist. You state the task kind, optionally a per-call budget in USD, how much speed matters, the input size and any vendor restriction; the answer names a model, the estimated cost per call, and the sub-scores it was chosen on, so the ranking can be checked rather than trusted. Models that cannot hold the input are excluded and listed separately with the reason. Weights are yours to set and are echoed back. The routing table is a heuristic over published prices and capability tags, not a benchmark: it will not tell you which model is more accurate on your data, and for anything quality-critical it is a shortlist to evaluate, not a verdict.","summary":"Pick a model for a task given budget, latency need, context size and data-residency constraints, with the score breakdown and the runners-up.","inputSchema":{"type":"object","required":["task"],"additionalProperties":false,"properties":{"task":{"type":"string","enum":["classification","extraction","summarization","translation","chat","coding","agent","reasoning","research","vision","long_context"],"description":"What the model has to do."},"budget_usd_per_call":{"type":"number","minimum":0,"description":"Ceiling per call. Models above it are excluded."},"speed_priority":{"type":"string","enum":["low","normal","high"],"default":"normal","description":"How much latency matters."},"input_tokens":{"type":"integer","minimum":0,"default":2000,"description":"Expected input size in tokens."},"input_text":{"type":"string","maxLength":100000,"description":"Sample input. Used to estimate input_tokens if that is not given."},"output_tokens":{"type":"integer","minimum":0,"description":"Expected output length. Defaults to a value typical for the task."},"allowed_vendors":{"type":"array","items":{"type":"string"},"description":"Restrict to these vendors, e.g. for a data-residency or procurement rule."},"excluded_vendors":{"type":"array","items":{"type":"string"},"description":"Exclude these vendors."},"require_tags":{"type":"array","items":{"type":"string"},"description":"Capabilities the model must carry, e.g. vision."},"weights":{"type":"object","additionalProperties":false,"description":"Weighting of cost, capability and speed. Normalised to sum 1.","properties":{"cost":{"type":"number","minimum":0,"default":0.4},"capability":{"type":"number","minimum":0,"default":0.4},"speed":{"type":"number","minimum":0,"default":0.2}}}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://modell.halowerk.com/v1/cost-estimate","method":"POST","name":"cost_estimate","description":"Works out what a call would cost. Give either the text itself or a token count, plus the expected output length, and get input, output, cache-read and cache-write cost per model with the total. Token counts derived from text are estimates from character and word statistics, not a tokeniser, and typically land within about 15 percent — where an exact count matters, count with the vendor tokeniser. Prices come from a table with a stated date; a model whose price has moved since is reported with its table date, so an old figure is visible rather than silently wrong. Unknown model names are refused with the closest matches rather than guessed.","summary":"Estimate token use and price for a prompt across several models before you spend anything, including cache and batch discounts.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":200000,"description":"The prompt text. Either this or input_tokens."},"input_tokens":{"type":"integer","minimum":0,"maximum":10000000,"description":"Known input token count. Either this or text."},"output_tokens":{"type":"integer","minimum":0,"maximum":1000000,"default":500,"description":"Expected output length in tokens."},"models":{"type":"array","items":{"type":"string"},"maxItems":20,"description":"Model ids to price. All known models if omitted."},"calls":{"type":"integer","minimum":1,"maximum":1000000,"default":1,"description":"Number of identical calls to multiply by."},"cached_input_tokens":{"type":"integer","minimum":0,"description":"Of the input tokens, how many are served from cache."},"batch":{"type":"boolean","default":false,"description":"Apply the batch discount where the model has one."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://modell.halowerk.com/v1/context-plan","method":"POST","name":"context_plan","description":"Plans the division of a long input for a given model. It reserves room for the system prompt, the expected answer and a safety margin, then works out how many chunks are needed and where to cut, preferring paragraph boundaries over line and sentence boundaries and never cutting inside a word. Optional overlap carries context across the seams. The result gives per-chunk token estimates, the character offsets of every cut, the boundary type actually used, and the total cost for processing all chunks on that model. If the text fits in one pass, it says so and stops. Token counts are estimates from character and word statistics, not a tokeniser: leave the default margin in place, or verify with the vendor counter where an overrun would be expensive.","summary":"Work out how to split a document across a model context window: how many chunks, where the cuts fall, how much overlap, and what it will cost.","inputSchema":{"type":"object","required":["text","model"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":2000000,"description":"The document to split."},"model":{"type":"string","description":"Target model id, e.g. claude-opus-5."},"expected_output_tokens":{"type":"integer","minimum":0,"default":2000,"description":"Room to reserve for the answer per chunk."},"system_prompt_tokens":{"type":"integer","minimum":0,"default":500,"description":"Room to reserve for the system prompt per chunk."},"overlap_tokens":{"type":"integer","minimum":0,"maximum":20000,"default":0,"description":"Tokens of the previous chunk repeated at the start of the next."},"safety_margin":{"type":"number","minimum":0,"maximum":0.5,"default":0.1,"description":"Fraction of the window held back against estimation error. 0.1 = 10 percent."},"boundary":{"type":"string","enum":["absatz","zeile","satz","auto"],"default":"auto","description":"Where to cut. auto tries paragraph, then line, then sentence."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://modell.halowerk.com/v1/output-validate","method":"POST","name":"output_validate","description":"Validates output against a JSON Schema and reports each violation with its JSON path, the rule it broke and a sentence saying what to change. Accepts either a parsed object or the raw string a model returned: a payload wrapped in a code fence or surrounded by prose is unwrapped, and the wrapping is reported separately from schema errors so you fix the right layer. Draft 2020-12 and draft-07 are both supported, along with the common string formats. Optionally the repairable problems are listed: missing fields that have a default, and unexpected extra fields. It validates structure, never truth — a document that satisfies the schema perfectly can still be factually wrong, and nothing here checks that.","summary":"Check a model answer against a JSON schema and get every deviation named in plain language with its path, plus whether the JSON was wrapped in prose or a code fence.","inputSchema":{"type":"object","required":["schema"],"additionalProperties":false,"properties":{"output":{"description":"The model answer, as a parsed JSON value. Either this or output_text."},"output_text":{"type":"string","maxLength":400000,"description":"The raw answer as text. Code fences and surrounding prose are stripped."},"schema":{"type":"object","description":"JSON Schema to validate against."},"all_errors":{"type":"boolean","default":true,"description":"Report every violation instead of stopping at the first."},"suggest_repairs":{"type":"boolean","default":true,"description":"List repairable problems (defaultable missing fields, extra fields)."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://modell.halowerk.com/v1/trace-grade","method":"POST","name":"trace_grade","description":"Takes the steps of one agent run and returns a scored report. It counts identical tool calls (same tool, same arguments) as loops, finds the longest run of consecutive failures, marks calls whose result was empty or null as wasted, and attributes cost per step and per tool so the expensive part is visible. Cost is taken from your figures when supplied, otherwise computed from token counts against the model price table. A grade from A to F is derived from four measurable ratios — loops, errors, empty results and cost concentration — and every ratio is returned with the threshold it was judged against, so the grade can be recomputed or disagreed with. It judges shape and spend only: a run can be efficient and still produce the wrong answer, and nothing here checks the answer.","summary":"Grade an agent run: total cost, repeated identical tool calls, error streaks, calls that returned nothing, and which step consumed the budget.","inputSchema":{"type":"object","required":["steps"],"additionalProperties":false,"properties":{"steps":{"type":"array","minItems":1,"maxItems":1000,"description":"The steps of the run, in order.","items":{"type":"object","additionalProperties":true,"properties":{"tool":{"type":"string","description":"Name of the tool or step."},"arguments":{"description":"The arguments used. Identical arguments on the same tool count as a loop."},"ok":{"type":"boolean","description":"Whether the step succeeded. Defaults to true unless error is set."},"error":{"type":"string","description":"Error text, if it failed."},"result":{"description":"The result. Empty, null or an empty list counts as a wasted call."},"input_tokens":{"type":"integer","minimum":0},"output_tokens":{"type":"integer","minimum":0},"cost_usd":{"type":"number","minimum":0,"description":"Cost of this step, if you already know it."},"duration_ms":{"type":"integer","minimum":0}}}},"model":{"type":"string","description":"Model id used, to price token counts when cost_usd is absent."},"loop_threshold":{"type":"integer","minimum":2,"default":2,"description":"From how many identical calls on it counts as a loop."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://modell.halowerk.com/v1/openapi-validate","method":"POST","name":"openapi_validate","description":"Reads an OpenAPI 3.x document and reports what would stop a machine consumer. Errors: missing openapi, info or paths; a path that declares no method; an internal $ref that resolves to nothing; a parameter without a name, location or schema; a request body without content. Warnings: an operation without operationId (client generators fall back to guessing), a response without a schema, a 2xx response missing entirely, no example anywhere on an operation, a path parameter that appears in the URL but is never declared. External $refs to other files are reported as unresolvable here rather than treated as errors, since only the document handed in is read. Swagger 2.0 is detected and rejected with a note rather than validated against the wrong rules.","summary":"Check an OpenAPI document for structural errors, dangling references, operations without an id, responses without a schema and endpoints without an example.","inputSchema":{"type":"object","required":["document"],"additionalProperties":false,"properties":{"document":{"type":"object","description":"The OpenAPI document as JSON."},"require_examples":{"type":"boolean","default":true,"description":"Report operations with no example as a warning."},"require_operation_ids":{"type":"boolean","default":true,"description":"Report operations without operationId as a warning."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://modell.halowerk.com/v1/openapi-to-mcp","method":"POST","name":"openapi_to_mcp","description":"Converts each OpenAPI operation into an MCP tool. Path, query and header parameters and the JSON request body are merged into one input schema, because MCP tools take exactly one; a name collision between a body field and a parameter is reported rather than silently overwritten. Internal $refs are expanded inline so each tool schema stands alone — an MCP client cannot resolve them. Tool names come from operationId, normalised to snake_case, or are derived from method and path when it is missing. Read-only operations are marked with readOnlyHint and write operations with destructiveHint. Only application/json bodies are converted: multipart, form and binary bodies are listed as skipped with the reason. The result is a starting point, not a finished server — it carries no auth handling and no request execution.","summary":"Turn an OpenAPI document into MCP tool definitions: one tool per operation, all parameters merged into a single flat input schema with references written out.","inputSchema":{"type":"object","required":["document"],"additionalProperties":false,"properties":{"document":{"type":"object","description":"The OpenAPI 3.x document as JSON."},"naming":{"type":"string","enum":["snake_case","preserve"],"default":"snake_case","description":"How to normalise tool names."},"include_methods":{"type":"array","items":{"type":"string"},"description":"Only convert these HTTP methods, e.g. [\"get\"] for a read-only server."},"prefix":{"type":"string","maxLength":40,"description":"Prefix for every tool name, to keep several APIs apart in one client."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://modell.halowerk.com/v1/tool-arg-validate","method":"POST","name":"tool_arg_validate","description":"Two checks in one. First the arguments are validated against the tool input schema and every violation is reported with its path and a sentence saying what to change. Second, values that satisfy the schema but look wrong are flagged: an unset required field filled with a placeholder like \"string\" or \"TODO\", a number at a suspicious order of magnitude, an address that fails its checksum shape, a destructive flag set to true, an empty string where content was expected. Fields whose names suggest an irreversible effect — amounts, recipients, deletion and force flags — are held to the stricter standard. Warnings are heuristics and can be wrong in both directions: treat them as a prompt to look, not a verdict, and never as a substitute for the tool own checks.","summary":"Check tool arguments against their schema before an expensive or irreversible call, and get warnings for values that pass the schema but look like mistakes.","inputSchema":{"type":"object","required":["arguments","schema"],"additionalProperties":false,"properties":{"arguments":{"type":"object","description":"The arguments about to be sent."},"schema":{"type":"object","description":"The tool input schema."},"tool_name":{"type":"string","maxLength":128,"description":"Name of the tool, carried into the report."},"irreversible":{"type":"boolean","default":false,"description":"Mark the call as irreversible. Raises every warning one level."},"expected_magnitude":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional per-field order-of-magnitude hint, e.g. {\"amount\": 100}. A value more than 100x off is flagged."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://modell.halowerk.com/v1/tool-compat","method":"POST","name":"tool_compat","description":"Compares a producer output schema against a consumer input schema and reports whether the two can be chained. Every required field of the consumer is looked for in the producer: exact name matches first, then well-known synonyms (url/uri/link, id/key/ref, created_at/timestamp and so on), which are reported as renames needing a mapping rather than as clean matches. Types are checked for direction: integer into number is widening, number into integer loses precision, anything into string is a conversion, string into anything is a parse that can fail. Enum values are intersected, so a producer that can emit a value the consumer does not accept is flagged. The result is a field mapping you can implement directly, plus the list of gaps no mapping can close.","summary":"Check whether one tool output can feed another tool input: which required fields are covered, which are missing, and which only match under a different name.","inputSchema":{"type":"object","required":["producer_schema","consumer_schema"],"additionalProperties":false,"properties":{"producer_schema":{"type":"object","description":"Output schema of the first tool."},"consumer_schema":{"type":"object","description":"Input schema of the second tool."},"producer_name":{"type":"string","maxLength":128,"description":"Name of the producing tool, for the report."},"consumer_name":{"type":"string","maxLength":128,"description":"Name of the consuming tool, for the report."},"use_synonyms":{"type":"boolean","default":true,"description":"Accept well-known renames as a match."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]}]}