{"name":"inference.md","title":"INFERENCE.md MCP server","does":"inference.md turns latency samples into percentiles, checks them against a service level, sizes capacity, and works out cost per million tokens from your hourly cost and error-budget burn from your counts.","not_here":"model endpoints, provider benchmarks, or price tables","feedback":{"url":"https://inference.md/feedback","note":"A person can ask for something that isn't here. An agent can send it by POST, once the person it works for says yes."},"version":"1.1.0","url":"https://inference.md/mcp","transport":"Streamable HTTP, stateless. POST JSON-RPC 2.0 to this URL; there is no event stream to open with GET.","auth":"none","add":"claude mcp add --transport http inference https://inference.md/mcp","config":{"cursor":{"file":".cursor/mcp.json","json":{"mcpServers":{"inference":{"url":"https://inference.md/mcp"}}}},"vscode":{"file":".vscode/mcp.json","json":{"servers":{"inference":{"type":"http","url":"https://inference.md/mcp"}}}}},"call":{"method":"POST","url":"https://inference.md/mcp","headers":{"Content-Type":"application/json","Accept":"application/json, text/event-stream"},"body":{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"slo_check","arguments":{"measured":{"ttft_p50_ms":420,"ttft_p95_ms":1180,"itl_p95_ms":62,"stream_tps_p10":31,"total_tps":640,"error_pct":0.5,"requests":200,"errors":1,"concurrency":8},"targets":{"ttft_p50_ms":500,"ttft_p95_ms":1000,"itl_p95_ms":80,"min_stream_tps":25,"max_error_pct":1,"max_concurrency":16}}}}},"tools":[{"name":"note_missing","title":"Note what inference.md is missing","description":"Leave an anonymous note that a task needed something inference.md doesn't do (for example: model endpoints, provider benchmarks, or price tables). Takes a short phrase naming the capability, not the task. Leave out names, addresses, keys and anything private. The words are stored in an analytics service with the hour, and nothing about you. The site owner may read these counts. Nothing is promised. No email is sent and nobody replies.","required":["need"],"read_only":false},{"name":"slo_check","title":"Check measured results against targets","description":"Compares measured results (from a probe report or your own monitoring) with your targets: time to first token p50 and p95, inter-token latency p95, tokens per second per stream, total throughput and error rate. Returns pass or fail per target with the margin, a 95% confidence check on the error rate when you send request and error counts, and the targets it can't check. A comparison of numbers you send, never a certification or a service level agreement.","required":["measured","targets"],"read_only":true,"example":{"measured":{"ttft_p50_ms":420,"ttft_p95_ms":1180,"itl_p95_ms":62,"stream_tps_p10":31,"total_tps":640,"error_pct":0.5,"requests":200,"errors":1,"concurrency":8},"targets":{"ttft_p50_ms":500,"ttft_p95_ms":1000,"itl_p95_ms":80,"min_stream_tps":25,"max_error_pct":1,"max_concurrency":16}}},{"name":"latency_stats","title":"Turn latency samples into percentiles","description":"Takes raw latency samples (up to 10,000, in ms or s) and returns count, min, max, mean, standard deviation, p50, p90, p95 and p99, with a flag on each percentile that rests on fewer than 5 samples above it. Optionally drops warm-up samples and compares one percentile with a target. Percentiles use linear interpolation between closest ranks.","required":["samples"],"read_only":true,"example":{"samples":[212,240,198,305,221,250,233,990,215,260,228,241,236,219,247,310,225,238,230,244],"unit":"ms","drop_first":2,"target":400,"target_percentile":"p95"}},{"name":"capacity_plan","title":"Size concurrency and replicas","description":"From your arrival rate, average input and output tokens and target latency, works out the average number of requests in flight (Little's law), a p99 in-flight estimate for random arrivals, the token throughput you need, and how many replicas that takes given the per-replica throughput and concurrency you measured. Estimates from your numbers only.","required":["arrival_rate","avg_input_tokens","avg_output_tokens"],"read_only":true,"example":{"arrival_rate":120,"rate_unit":"minute","peak_factor":2,"avg_input_tokens":1500,"avg_output_tokens":300,"ttft_ms":600,"stream_tps":30,"per_replica_output_tps":900,"per_replica_concurrency":32,"target_utilization_pct":70,"spare_replicas":1}},{"name":"cost_per_mtok","title":"Cost per million tokens from your hourly cost","description":"From your own hourly cost and measured throughput for one replica, works out the cost per million tokens at a utilization, and the break-even utilization against a per-million-token price you enter. Optionally compares both at a monthly token volume. Uses no prices of its own; every figure is an estimate from your numbers.","required":["hourly_cost","throughput_tps"],"read_only":true,"example":{"hourly_cost":4,"throughput_tps":1200,"tokens_counted":"output","utilization_pct":60,"replicas":1,"compare_price_per_mtok":2,"monthly_tokens":1500000000}},{"name":"error_budget","title":"Error budget and burn rate","description":"From your availability target (or allowed error rate), the window length, and the requests and errors counted so far, works out the window's error budget in errors, how much is used and left, the burn rate (share of the budget used / share of the window elapsed), the day the budget runs out at that pace, and a pace verdict. Lists the error rates that trip the usual multi-window burn-rate alerts (14.4x over 1 hour, 6x over 6 hours, 1x over 3 days), checks up to three recent samples against them, and flags small counts with the rule of three. Traffic for the rest of the window comes from requests_per_day or, without it, from the rate seen so far. Uses only the counts you send; it reads no monitoring and is not a service level agreement.","required":["requests","errors","days_elapsed"],"read_only":true,"example":{"target":0.999,"window_days":30,"requests":2000000,"errors":2600,"days_elapsed":10,"requests_per_day":200000,"recent":[{"hours":1,"requests":8000,"errors":100},{"hours":6,"requests":50000,"errors":200},{"hours":72,"requests":600000,"errors":700}]}},{"name":"build_settings","title":"Write your settings into the skill","description":"Turns a preset and settings into the sections written at the top of INFERENCE.md. Every setting is a number or a fixed choice; the catalog is at https://inference.md/api/v1/settings. Returns the sections as Markdown, the settings as JSON, a link to the skill with them written in and a one-line install. Out-of-range numbers are clamped with a note. Nothing is stored. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree.","required":[],"read_only":true,"example":{"preset":"chat"}},{"name":"whats_new","title":"What's new here, and what's next","description":"What changed on inference.md and when, what is planned, when to check back, and the other .md sites. Pass since (a date) to get only newer entries, for example the updated date of the skill you have. Reads a list kept with the code; fetches nothing and stores nothing.","required":[],"read_only":true,"example":{"since":"2026-10-01"}}],"prompts":[{"name":"inference","title":"INFERENCE.md","description":"The INFERENCE.md skill. Pass a preset or any setting to write your settings in. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree."}],"resources":[{"uri":"https://inference.md/inference.md","name":"INFERENCE.md","title":"INFERENCE.md skill"},{"uri":"https://inference.md/changelog.md","name":"changelog","title":"INFERENCE.md changelog: what's new and what's next"},{"uri":"https://inference.md/api/v1/settings","name":"settings","title":"INFERENCE.md settings catalog"}],"example_note":"The values in the examples are made up. Send your own.","page":"https://inference.md/mcp in a browser shows this list with examples you can run.","docs":"https://inference.md/#install","disclaimer":"Use at your own risk. inference.md is provided as is, without warranty. Information here may be inaccurate, incomplete or not current, and is not verified; figures are estimates from the numbers you send and the formulas stated. Nothing here is engineering, capacity-planning, financial, legal or other professional advice. inference.md never calls your endpoints, runs tests for you or holds your keys. Check everything yourself before you act on it.","terms":"https://inference.md/terms"}