{"server":"io.github.travisbergen2/rpcs1-agent-tuner","count":9,"tools":[{"name":"calibrate_profile","title":"Calibrate a user’s receiver profile","description":"Build a ReceiverProfile (TI, SG, FT, UE, AR — continuous 0-100, never a category label) from five behavioral forced-choice answers. Call with NO answers to get the five questions to ask the user; call again with their answers (a/b/c per primitive) to get the profile. Store the returned profile JSON in the user’s notes or memory and pass it to render_reply / prepare_prompt on every turn. Deterministic and stateless — nothing is stored server-side. Schema: https://rpcs1.dev/v1/receiver-profile.json","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"answers":{"type":"object","properties":{"AR":{"enum":["a","b","c"],"type":"string"},"FT":{"enum":["a","b","c"],"type":"string"},"SG":{"enum":["a","b","c"],"type":"string"},"TI":{"enum":["a","b","c"],"type":"string"},"UE":{"enum":["a","b","c"],"type":"string"}},"description":"Chosen option id per primitive. Omit entirely to receive the questions.","additionalProperties":false}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T17:23:29.392Z"},{"name":"fork","title":"Fork view — how could this message read?","description":"The calibrated ambiguity surface: deterministic structural fork detectors (reference, scope, grouping, compare-vs-choose, polysemy) with character-offset spans, plus per-reading one-line clarifiers the sender can append to lock a reading in. Returns competing readings, an ask-back question, and a forked-answer scaffold. Silent on clean text by contract. Runs the deterministic mirror floor only over MCP (no model). Prefer this over interpret for span-level ambiguity detection: interpret’s entity list is a word-list engine (calibrated 2026-08-15: no discrimination on conversational text) — advisory only.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["text"],"properties":{"text":{"type":"string","maxLength":5000,"minLength":1,"description":"The message to analyze for forks."},"rejected":{"type":"array","items":{"type":"string"},"maxItems":12,"description":"Reading summaries the user already rejected — never re-offered."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T17:23:29.392Z"},{"name":"interpret","title":"Interpret ambiguous human input","description":"Detect ambiguity in user messages using the RPCS-1 Signature Ambiguity Framework. Returns AR level (AR0-AR5), confidence, candidate interpretations with scores, clarifying questions, and suggested next step. Use when a user says something vague, passive-aggressive, or underspecified.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["text"],"properties":{"risk":{"enum":["casual","advice","high-stakes","safety-critical"],"type":"string","default":"advice","description":"Risk category for ambiguity threshold."},"text":{"type":"string","maxLength":5000,"minLength":1,"description":"The message to interpret."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T17:23:29.392Z"},{"name":"normalize","title":"Normalize fragmented human input","description":"Clean up text with ellipses, fragments, and run-on thoughts into coherent prose. Use when a user types stream-of-consciousness or fragmented input.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["text"],"properties":{"text":{"type":"string","maxLength":5000,"minLength":1,"description":"Fragmented text to normalize."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T17:23:29.392Z"},{"name":"prepare_prompt","title":"Prepare a user’s message before acting on it","description":"The inbound half of the Translation Bridge loop. Takes the user’s raw message (possibly ambiguous, fragmented, or underspecified) plus their ReceiverProfile, and returns the recovered intent, a canonical translation to act on, ambiguity level, and — profile-aware — whether to clarify or commit. Call this before acting on any ambiguous user request. Scope note: its detectors are lexical/structural (vague signals, ambiguous references) — for the commit-vs-clarify DECISION, route_intent (with your own proposed readings) is the authority; when they disagree, follow route_intent.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["text"],"properties":{"risk":{"enum":["casual","advice","high-stakes","safety-critical"],"type":"string","default":"advice","description":"Risk category for the ambiguity threshold."},"text":{"type":"string","maxLength":5000,"minLength":1,"description":"The user’s raw message."},"profile":{"type":"object","required":["TI","SG","FT","UE","AR"],"properties":{"AR":{"type":"number","maximum":100,"minimum":0,"description":"Ambiguity Resolution: 100 = commit to best reading, 0 = clarify first"},"FT":{"type":"number","maximum":100,"minimum":0,"description":"Filtering Threshold: 100 = explicit and literal, 0 = subtext lands"},"SG":{"type":"number","maximum":100,"minimum":0,"description":"Signal Gain: 0 = flat and factual, 100 = warm and expressive"},"TI":{"type":"number","maximum":100,"minimum":0,"description":"Temporal Integration: 0 = bottom line first, 100 = full context first"},"UE":{"type":"number","maximum":100,"minimum":0,"description":"Update Elasticity: 100 = pushback welcome, 0 = prefers consistency"}},"description":"The user’s ReceiverProfile from calibrate_profile. Shapes clarify-vs-commit behavior.","additionalProperties":false}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T17:23:29.392Z"},{"name":"recommend_agent_configuration","title":"Recommend AI agent configuration","description":"Diagnose why a deployed AI agent may fail. Takes environmental entropy, predictability, stakes, context horizon, and commitment style, then returns receiver profile values (TI, SG, FT, UE, AR), platform parameters (temperature, top_p, strategy), regime prediction, reasoning, and warnings. Optionally pass target_model (the actual model id) to attach MEASURED per-model receiver posture (E-LIT table): evidence-graded literalness, truth-override boundary, and translation directives. Deterministic, stateless, read-only — does not store past recommendations.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"task":{"type":"object","default":{"domain":"customer_support","task_summary":"Customer support agent handling refunds, billing disputes, and policy exceptions","expected_duration_per_call":"medium"},"properties":{"domain":{"type":"string","default":"customer_support","maxLength":100,"minLength":1,"description":"Optional domain such as coding, research, or support."},"task_summary":{"type":"string","default":"Customer support agent handling refunds, billing disputes, and policy exceptions","maxLength":2000,"minLength":1,"description":"Plain-language description of what the AI agent does."},"expected_duration_per_call":{"enum":["short","medium","long"],"type":"string","default":"medium"}},"additionalProperties":false},"environment":{"type":"object","default":{"stakes":"high","entropy":"dynamic","predictability":"somewhat_predictable","commitment_style":"cautious","context_relevance":"medium"},"properties":{"stakes":{"enum":["low","medium","high","catastrophic"],"type":"string","default":"high","description":"The cost of an incorrect agent action."},"entropy":{"enum":["stable","moderate","dynamic","chaotic"],"type":"string","default":"dynamic","description":"How often the operating environment changes."},"predictability":{"enum":["highly_predictable","somewhat_predictable","unpredictable"],"type":"string","default":"somewhat_predictable","description":"How predictable changes are when they occur."},"commitment_style":{"enum":["decisive","balanced","cautious"],"type":"string","default":"cautious","description":"How quickly the agent should commit to an action."},"context_relevance":{"enum":["short","medium","long"],"type":"string","default":"medium","description":"How far back relevant context usually extends."}},"additionalProperties":false},"target_model":{"type":"string","maxLength":200,"minLength":1,"description":"Optional: the actual model id this agent will run on (e.g. \"claude-sonnet-4-6\", \"deepseek-v4-pro\"). When it matches a measured per-model receiver entry (E-LIT table), measured translation directives and evidence-graded posture data are attached to platform_parameters. Unknown models fall back to platform-level behavior unchanged."},"target_platform":{"enum":["anthropic","openai","open_source","generic"],"type":"string","default":"anthropic","description":"The platform whose runtime parameters should be recommended."}},"additionalProperties":false},"output_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["receiver_profile","platform_parameters","predicted_regime","reasoning","warnings","imm_principles_applied","confidence"],"properties":{"warnings":{"type":"array","items":{"type":"string"}},"reasoning":{"type":"string"},"confidence":{"enum":["high","medium","low"],"type":"string"},"predicted_regime":{"enum":["stable","near_oscillation","near_overload","near_freeze"],"type":"string"},"receiver_profile":{"type":"object","required":["TI","SG","FT","UE","AR"],"properties":{"AR":{"type":"number"},"FT":{"type":"number"},"SG":{"type":"number"},"TI":{"type":"number"},"UE":{"type":"number"}},"additionalProperties":false},"platform_parameters":{"type":"object","required":["temperature","max_tokens"],"properties":{"top_p":{"type":"number"},"max_tokens":{"type":"number"},"temperature":{"type":"number"},"retry_strategy":{"enum":["aggressive","moderate","minimal"],"type":"string"},"receiver_traits":{"type":"array","items":{"type":"string"},"description":"Reliability warnings and named traits for the measured receiver."},"context_strategy":{"enum":["long_window","rolling_summary","frequent_grounding"],"type":"string"},"receiver_evidence":{"type":"object","required":["model_key","display_name","grade","li2","ob","fringe","measured_on","scope"],"properties":{"cb":{"type":"number","description":"E-LIT-3 care boundary (1-4): highest emotional-intensity rung at which fenced answers stay bare."},"ob":{"type":"number","description":"Truth-override boundary rung (0-5)."},"sb":{"type":"number","description":"E-LIT-3 stakes boundary (1-5): highest stakes rung at which format fences still hold. Separate instrument; never pooled with li2/ob."},"li2":{"type":"number","description":"Fenced literalness, [-1, +1]."},"grade":{"enum":["confirmatory","corroboration","self_measurement"],"type":"string","description":"Evidence grade of the measurement — travels with the data."},"scope":{"type":"string"},"fringe":{"type":"array","items":{"type":"number"},"description":"Rungs with modal comply-then-correct."},"model_key":{"type":"string"},"measured_on":{"type":"string"},"display_name":{"type":"string"}},"description":"Present only when target_model has a measured per-model receiver entry.","additionalProperties":false},"tool_use_strategy":{"enum":["explicit_confirmation","cautious_chaining","aggressive","fail_fast"],"type":"string"},"translation_notes":{"type":"array","items":{"type":"string"}},"translation_posture":{"enum":["direct","bridging","face_preserving","minimal_clarifying"],"type":"string"},"model_recommendation":{"type":"string"},"system_prompt_additions":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"imm_principles_applied":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T17:23:29.392Z"},{"name":"render_reply","title":"Render a reply for a specific user’s receiver profile","description":"The outbound half of the Translation Bridge loop. Takes your draft reply plus the user’s ReceiverProfile and returns deterministic rendering instructions (structure, warmth, explicitness, revision posture, ambiguity handling — each with a why-trace). Apply the instructions to your draft before answering. Call this on every reply to a calibrated user.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["text","profile"],"properties":{"text":{"type":"string","maxLength":10000,"minLength":1,"description":"Your draft reply."},"profile":{"type":"object","required":["TI","SG","FT","UE","AR"],"properties":{"AR":{"type":"number","maximum":100,"minimum":0,"description":"Ambiguity Resolution: 100 = commit to best reading, 0 = clarify first"},"FT":{"type":"number","maximum":100,"minimum":0,"description":"Filtering Threshold: 100 = explicit and literal, 0 = subtext lands"},"SG":{"type":"number","maximum":100,"minimum":0,"description":"Signal Gain: 0 = flat and factual, 100 = warm and expressive"},"TI":{"type":"number","maximum":100,"minimum":0,"description":"Temporal Integration: 0 = bottom line first, 100 = full context first"},"UE":{"type":"number","maximum":100,"minimum":0,"description":"Update Elasticity: 100 = pushback welcome, 0 = prefers consistency"}},"description":"The user’s ReceiverProfile from calibrate_profile.","additionalProperties":false}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T17:23:29.392Z"},{"name":"rewrite","title":"Rewrite text for a target audience","description":"Get rewrite instructions for adapting text to a specific style: technical, plain, socially_gentle, concise, detailed, or direct. Use when communication needs tone adjustment.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["text"],"properties":{"text":{"type":"string","maxLength":5000,"minLength":1,"description":"Text to rewrite."},"style":{"enum":["technical","plain","socially_gentle","concise","detailed","direct"],"type":"string","default":"plain","description":"Target audience style."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T17:23:29.392Z"},{"name":"route_intent","title":"Route an ambiguous request: commit, present options, or clarify","description":"Entropy routing over competing interpretations — the model proposes, the deterministic core disposes. YOU generate the candidate readings of the user’s message (3–7 short hypotheses covering the plausible interpretations, INCLUDING likely-typo readings, idiom-vs-literal readings, and domain senses) and pass them as hypotheses, ideally with your own likelihoods (0–1 per reading) AND a paraphrase per reading — the user’s message rewritten unambiguously under that interpretation, so the user can VERIFY intent by recognition before anything commits (one misread prompt skews a whole thread). The router computes the posterior and its normalized entropy T̂ and returns the decision: commit (one reading dominates), commit_with_note (close alternative disclosed), present_options (several readings live), or clarify (ask before acting — open-endedly when nothing discriminates). Thresholds adapt to the user’s ReceiverProfile (AR widens/narrows the commit region; high FT discloses near-ties). This tool is the commit-vs-clarify AUTHORITY in the pipeline. Omitting hypotheses falls back to a generic six-intent PRODUCT-ROUTING starter set — do not use the fallback for interpreting arbitrary sentences. Deterministic, stateless, read-only. Benchmarked: RTEB v1.1 (developer-bench grade; see docs/routing.md).","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["text"],"properties":{"text":{"type":"string","maxLength":5000,"minLength":1,"description":"The user’s raw message."},"profile":{"type":"object","required":["TI","SG","FT","UE","AR"],"properties":{"AR":{"type":"number","maximum":100,"minimum":0,"description":"Ambiguity Resolution: 100 = commit to best reading, 0 = clarify first"},"FT":{"type":"number","maximum":100,"minimum":0,"description":"Filtering Threshold: 100 = explicit and literal, 0 = subtext lands"},"SG":{"type":"number","maximum":100,"minimum":0,"description":"Signal Gain: 0 = flat and factual, 100 = warm and expressive"},"TI":{"type":"number","maximum":100,"minimum":0,"description":"Temporal Integration: 0 = bottom line first, 100 = full context first"},"UE":{"type":"number","maximum":100,"minimum":0,"description":"Update Elasticity: 100 = pushback welcome, 0 = prefers consistency"}},"description":"The user’s ReceiverProfile from calibrate_profile. Shapes commit-vs-clarify thresholds.","additionalProperties":false},"hypotheses":{"type":"array","items":{"type":"object","required":["id","label"],"properties":{"id":{"type":"string","maxLength":64,"minLength":1},"cues":{"type":"array","items":{"type":"string","maxLength":64,"minLength":1},"maxItems":32,"description":"Lexical cues for the built-in scorer; omit when passing likelihoods."},"label":{"type":"string","maxLength":200,"minLength":1},"prior":{"type":"number","exclusiveMinimum":0},"paraphrase":{"type":"string","maxLength":500,"minLength":1,"description":"The user’s message REWRITTEN UNAMBIGUOUSLY under this reading. Strongly recommended: when the router asks, the user verifies intent by reading these restatements, not by decoding labels."}},"additionalProperties":false},"maxItems":24,"minItems":2,"description":"Candidate interpretations. Omit to use a generic six-intent starter set plus a catch-all."},"likelihoods":{"type":"object","description":"Optional externally computed likelihood per hypothesis id (e.g. model-derived) — replaces the lexical scorer.","additionalProperties":{"type":"number","minimum":0}}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T17:23:29.392Z"}],"next_cursor":null,"next_actions":[{"action":"get_connection","description":"Connection block to call these tools","href":"/v1/servers/io.github.travisbergen2%2Frpcs1-agent-tuner/connection?target=mcpServers","arguments":{"name":"io.github.travisbergen2/rpcs1-agent-tuner","target":"mcpServers"}},{"action":"get_server","description":"Full descriptor with trust and connectability","href":"/v1/servers/io.github.travisbergen2%2Frpcs1-agent-tuner","arguments":{"name":"io.github.travisbergen2/rpcs1-agent-tuner"}}]}