Skip to main content
Glama

Jef MCP

An MCP server for a model that decides instead of generating.

Jef never produces text. Every answer is one of the options you supplied, a number from 1 to 10, a yes or no, or a flag, with a confidence between 84% and 99%. It reads 0 tokens of your input, because it hashes it rather than reading it. It stores nothing, costs nothing, and returns the same answer for the same input forever.

It is a parody of TypeSafe AI's real decision model, Jev, and it is labelled as one everywhere. If you want to understand the real thing, we wrote a straight explainer for it: What is Jev?

Connect

The server is hosted. Nothing to install, no key, no account.

https://typosafe.lol/mcp

Claude Code:

claude mcp add --transport http jef https://typosafe.lol/mcp

Anything that reads a config file:

{
  "mcpServers": {
    "jef": { "type": "http", "url": "https://typosafe.lol/mcp" }
  }
}

Or find it in the official MCP registry as lol.typosafe/jef, or on Smithery as typosafe/jef.

Related MCP server: daf-jev

Tools

Tool

Ask it

Get back

jef_yes_no

A yes-or-no question

YES or NO

jef_pick

2 to 5 options

One of them, plus a probability for each

jef_score

Something to rate

1 to 10

jef_rank

2 to 5 options

Them, in order

jef_flag

A described behaviour

RED FLAG, GREEN FLAG or BEIGE FLAG

Every result carries a structuredContent object with the answer, the confidence, the probability for each option, and two booleans that matter more than the answer does.

Two things an agent must handle

escalated: true means the question touched health, harm, money, law or safety. The content is ESCALATED TO A HUMAN and confidence is 0. Tell the person to ask a human. Do not rephrase the question to get a different answer.

blocked: true means the input contained profanity, slurs or sexual content. The content is NOT EVALUATED, nothing was stored, and nothing is echoed back. Do not retry.

Both checks run on normalised text, so leetspeak, dotted letters and stretched spellings are caught, and both cover English, Spanish, Portuguese, Japanese and Chinese.

Beyond that: Jef is a parody and its answers are deliberately arbitrary. Present them as a confident arbitrary choice, which is what the user asked for, and never as advice.

Run it yourself

npx jef-mcp                    # MCP over stdio, what most clients spawn

Or from source:

git clone https://github.com/SPFreedom/jef-mcp.git
cd jef-mcp
node src/stdio.js              # stdio transport
node src/server.js             # http://localhost:8787/mcp
node test.js                   # smoke test, no network

As a local stdio server in a client config:

{
  "mcpServers": {
    "jef": { "command": "npx", "args": ["-y", "jef-mcp"] }
  }
}

The hosted URL needs no install. This one runs entirely offline, which is possible because the whole model is 331 lines and reads nothing.

Zero dependencies. src/jef.js is the whole model, and src/handler.js is the exact handler running at typosafe.lol/mcp.

Why the joke works

Every other MCP server is a wrapper around something that does work. This one wraps a 32-bit hash and a lookup table, and is honest that it never reads your input. It is stateless, so there is no session to establish and nothing to resume, which is the one part of MCP it implements better than most.

Related: npx typosafe is the same model on the command line, where the exit code is the decision.

Docker

docker build -t jef-mcp .
docker run -i --rm jef-mcp        # stdio, nothing exposed

The build runs the test suite, so a broken image cannot be produced. Nothing is installed, because there is nothing to install.

License

MIT. The model is 331 lines. Read it.

Available Tools

5 tools
jef_flagAsk Jef if it is a red flagA
Read-onlyIdempotent
Inspect

Judge a described behaviour as RED FLAG, GREEN FLAG or BEIGE FLAG. Use this when the user describes something someone did and wants a verdict on it. Beige means neither good nor bad, merely odd. Anything describing harm, threats or abuse escalates instead of being judged.

ParametersJSON Schema
NameRequiredDescriptionDefault
behaviourYesWhat the person did, in one sentence.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWhich decision shape was used.
answerYesExactly "RED FLAG", "GREEN FLAG" or "BEIGE FLAG".
blockedYesTrue when the input contained profanity, slurs or sexual content. Nothing was stored or echoed. Do not retry.
rankingNoThe options in order, best first. Null unless the shape was order.
cost_usdNoAlways 0. There is no billing.
thoughtsNoAlways 0.
escalatedYesTrue when the input touched health, harm, money, law or safety. Tell the person to ask a human. Do not rephrase and retry.
confidenceYes0.84 to 0.99 normally, exactly 0 when escalated or blocked. It is not calibrated and means nothing.
latency_msNoNegative. Jef answers before you ask.
tokens_readNoAlways 0. The input is hashed, not read.
probabilitiesNoOne entry per option, percentages summing to 100. Null unless the shape was pick.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the escalation rule for harmful content and defines 'beige', providing context beyond the annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main purpose, and every sentence adds value. It is concise without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one parameter fully described in the schema and an output schema present, the description covers the key behavioral nuances (escalation, definition of beige). It is complete enough for an agent to invoke correctly, though it does not mention the exact output format, which is likely in the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter 'behaviour' is described adequately. The description adds meaning by clarifying that it should be a one-sentence behavior description and specifies the escalation condition, enhancing the schema's basic description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Judge') and resource ('described behaviour') with a clear output (RED/GREEN/BEIGE flag). It is not a tautology and clearly distinguishes itself as a judgment tool, though it does not explicitly name sibling tools to differentiate from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use ('when the user describes something someone did and wants a verdict') and when not to (anything describing harm, threats, or abuse escalates). It lacks explicit alternative tool names but provides a clear condition for not using it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jef_pickAsk Jef to pick oneA
Read-onlyIdempotent
Inspect

Pick one of 2 to 5 options and give a probability for each. Use this when the user is stuck between named choices and wants one chosen for them: dinner, which film, which of three plans. Jef can only ever return an option you passed in, so it cannot introduce an idea of its own.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionsYesThe candidates. The answer is always one of these, exactly as written.
questionNoOptional context, such as "what should I cook tonight". Affects the answer but is not read.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWhich decision shape was used.
answerYesOne of the options you passed in, copied exactly.
blockedYesTrue when the input contained profanity, slurs or sexual content. Nothing was stored or echoed. Do not retry.
rankingNoThe options in order, best first. Null unless the shape was order.
cost_usdNoAlways 0. There is no billing.
thoughtsNoAlways 0.
escalatedYesTrue when the input touched health, harm, money, law or safety. Tell the person to ask a human. Do not rephrase and retry.
confidenceYes0.84 to 0.99 normally, exactly 0 when escalated or blocked. It is not calibrated and means nothing.
latency_msNoNegative. Jef answers before you ask.
tokens_readNoAlways 0. The input is hashed, not read.
probabilitiesNoOne entry per option, percentages summing to 100. Null unless the shape was pick.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds the key behavioral guarantee that Jef cannot introduce new options ('only ever return an option you passed in'), and that it outputs probabilities. It does not elaborate on the behavior of the optional question parameter beyond the schema's note, but it adds meaningful constraint disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loads the primary action and output, gives concrete usage examples, and adds a single crucial constraint. No redundant or filler language. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with two parameters, full schema coverage, and an output schema (present). Annotations cover safety (readOnly, idempotent, non-destructive). The description covers purpose, usage, and a key behavioral constraint. It does not explicitly state what the question parameter does beyond the schema, but that is already documented. Overall, nothing critical is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides full descriptions for both parameters (100% coverage). The description does not add any parameter-specific meaning beyond what the schema already states; it only reiterates the constraint that returned options are from the passed list, which is already in the options description. Thus, the description does not need to compensate, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Pick') and resource ('one of 2 to 5 options') and states the output ('give a probability for each'). It clearly distinguishes from siblings like jef_rank or jef_yes_no by specifying the scenario of 'stuck between named choices.' The constraint that it only returns passed-in options further clarifies scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use it ('when the user is stuck between named choices and wants one chosen for them') with concrete examples (dinner, film, plans). It does not explicitly name alternative sibling tools, but the examples imply the use case is distinct from ranking or scoring. This is clear but could benefit from explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jef_rankAsk Jef to rank thingsA
Read-onlyIdempotent
Inspect

Put 2 to 5 options in order, best first. Use this when the user wants a priority order decided for them, such as which chore to do first or which of several tasks to start with. Returns every option you passed, reordered, never a subset.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionsYesThe things to order. All of them come back, reordered.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWhich decision shape was used.
answerYesThe options joined with " > ", best first.
blockedYesTrue when the input contained profanity, slurs or sexual content. Nothing was stored or echoed. Do not retry.
rankingNoThe options in order, best first. Null unless the shape was order.
cost_usdNoAlways 0. There is no billing.
thoughtsNoAlways 0.
escalatedYesTrue when the input touched health, harm, money, law or safety. Tell the person to ask a human. Do not rephrase and retry.
confidenceYes0.84 to 0.99 normally, exactly 0 when escalated or blocked. It is not calibrated and means nothing.
latency_msNoNegative. Jef answers before you ask.
tokens_readNoAlways 0. The input is hashed, not read.
probabilitiesNoOne entry per option, percentages summing to 100. Null unless the shape was pick.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds valuable behavioral context beyond annotations: the output preserves all inputs, is reordered, and is never a subset.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler. The core constraint is front-loaded, the usage context follows, and the invariant return behavior is stated clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, well-annotated tool with an output schema, the description covers what the tool does, when to use it, and key behavior. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents options with min/max constraints and the 'all come back, reordered' behavior. The tool description restates this but does not add new parameter-specific meaning beyond 'best first,' which is more of an output ordering rule.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Put 2 to 5 options in order, best first.' It clearly distinguishes ranking from the sibling tools by emphasizing that every passed option is returned reordered, never a subset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: 'Use this when the user wants a priority order decided for them' with concrete examples. It does not explicitly name sibling tools or state when not to use it, but the use case is specific enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jef_scoreAsk Jef to rate somethingA
Read-onlyIdempotent
Inspect

Rate something from 1 to 10. Use this when the user wants a number put on something subjective, such as an outfit, a plan, or an excuse. The number is arbitrary and deterministic, so the same description always scores the same.

ParametersJSON Schema
NameRequiredDescriptionDefault
thingYesWhat is being rated, described in the user's own words.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWhich decision shape was used.
answerYesA score written as "7/10".
blockedYesTrue when the input contained profanity, slurs or sexual content. Nothing was stored or echoed. Do not retry.
rankingNoThe options in order, best first. Null unless the shape was order.
cost_usdNoAlways 0. There is no billing.
thoughtsNoAlways 0.
escalatedYesTrue when the input touched health, harm, money, law or safety. Tell the person to ask a human. Do not rephrase and retry.
confidenceYes0.84 to 0.99 normally, exactly 0 when escalated or blocked. It is not calibrated and means nothing.
latency_msNoNegative. Jef answers before you ask.
tokens_readNoAlways 0. The input is hashed, not read.
probabilitiesNoOne entry per option, percentages summing to 100. Null unless the shape was pick.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context beyond annotations by explaining that the score is 'arbitrary and deterministic' and that identical descriptions always receive the same score. This supplements the idempotentHint and readOnlyHint annotations with a meaningful user-facing behavior, though the deterministic aspect is somewhat implied by the idempotent annotation already.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core action, and every sentence earns its place. The purpose, usage context, and key behavioral caveat are all covered in three concise sentences with no filler or redundant detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (single parameter), rich annotations, and presence of an output schema, the description is fully sufficient. It explains what to input, how the tool behaves, and when to use it, leaving no critical gaps for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, the parameter is already well documented. The description adds value by specifying the kind of content expected ('something subjective') and providing examples (outfit, plan, excuse), which clarifies the scope of 'thing' beyond the schema's generic 'what is being rated.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Rate something from 1 to 10') and the exact resource/subject being rated, distinguishing it from siblings like jef_flag or jef_yes_no by specifying a numeric 1-10 subjective rating. The verb and resource are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this when the user wants a number put on something subjective' and gives concrete examples (outfit, plan, excuse), providing clear conditions for use. However, it does not explicitly mention when not to use it or name alternative tools, so it falls just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jef_yes_noAsk Jef yes or noA
Read-onlyIdempotent
Inspect

Answer a yes-or-no question with YES or NO and a confidence. Use this when the user wants a question settled and there is no correct answer, such as whether to go out, whether to send the message, or whether to deploy on a Friday. Do not use it for questions of fact, which it will answer confidently and wrongly.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesThe question, phrased so that yes or no is a sensible answer. It is hashed rather than read, so wording changes the answer but meaning does not.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWhich decision shape was used.
answerYesExactly "YES" or "NO", or "ESCALATED TO A HUMAN", or "NOT EVALUATED".
blockedYesTrue when the input contained profanity, slurs or sexual content. Nothing was stored or echoed. Do not retry.
rankingNoThe options in order, best first. Null unless the shape was order.
cost_usdNoAlways 0. There is no billing.
thoughtsNoAlways 0.
escalatedYesTrue when the input touched health, harm, money, law or safety. Tell the person to ask a human. Do not rephrase and retry.
confidenceYes0.84 to 0.99 normally, exactly 0 when escalated or blocked. It is not calibrated and means nothing.
latency_msNoNegative. Jef answers before you ask.
tokens_readNoAlways 0. The input is hashed, not read.
probabilitiesNoOne entry per option, percentages summing to 100. Null unless the shape was pick.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds a valuable behavioral caveat—that it will answer factual questions 'confidently and wrongly'—which is beyond what annotations provide. The schema note about hashing also contributes, but that is not part of the main description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences with zero fluff. It front-loads the core purpose first, then provides usage guidance and a critical warning. Every word earns its place, and it remains highly readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with a single parameter and an existing output schema, the description is complete. It covers purpose, when to use, when not to use, and a behavioral caveat. The output format is presumably handled by the output schema, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the 'question' parameter is fully documented in the schema, including the hashing behavior and constraints. The main description adds no additional parameter-level semantics, so the baseline of 3 applies as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Answer'), a clear resource ('a yes-or-no question'), and the exact output format ('YES or NO and a confidence'). It distinguishes itself from sibling tools by restricting scope to questions with no correct answer and explicitly excludes factual questions, making it unambiguous which tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use it ('when the user wants a question settled and there is no correct answer') with concrete examples, and when not to ('Do not use it for questions of fact'). However, it does not name any alternative sibling tools (e.g., jef_score or jef_pick) that might apply instead, so the alternatives component is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.4.7
    • First observedjef_flag
    • First observedjef_pick
    • First observedjef_rank
    • First observedjef_score
    • First observedjef_yes_no

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool produces a distinctly different output type: binary yes/no, a single pick with probabilities, a numeric score, an ordering, and a categorical flag. The descriptions explicitly map use cases to each response shape, so an agent should not confuse them.

Naming Consistency4/5

All names share the jef_ prefix and use lowercase snake_case, which is consistent. The only slight deviation is jef_yes_no being named after its output while the others are verb-like commands (pick, score, rank, flag), but this is a minor inconsistency.

Tool Count5/5

Five tools is a well-scoped size for a subjective-decision helper server. Each tool covers a different way a user might want an opinion, and none feel redundant or unnecessary.

Completeness5/5

The tool surface covers the main decision output types an agent would need: binary choices, selection among options, numerical ratings, ordering, and categorical verdicts. There are no obvious dead ends or missing operations for the stated purpose.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that wraps the StupidAPIs' 'The Committee' tool, which convenes five random number generators to argue and vote with one always dissenting.
    4 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables natural-language interaction with TypeSafe's Jev decision API, supporting mixed question calls, batch evaluation, model listing, and confidence or composite-score gates over stdio.
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables frontier coding agents to delegate routine probabilistic judgments to TypeSafe Jev, providing calibrated triage signals for failures, attempts, completion, context ranking, findings, risk, and generic evidence-grounded questions.
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables agents to get fast, calibrated probabilistic answers from Jev (Typesafe AI) to yes/no, scale, or choice questions about provided material, without using a generative model.
    1
    MIT