feellab-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@feellab-mcpjudge the timelines in demo and give me a Markdown report"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Game feel is what a player feels between pressing a key and seeing the world answer. A shot should flash, sound and kick on the same frame; a round striking a wall should throw dust, make a sound and leave a hole; a hit taken should jerk the view and show where it came from; a blast nearby should shake the screen more than one far away. When one answer is missing or late, the game feels floaty or cheap, and nobody can say why.
Feel Lab turns that into checks. Your game's probe plays standard scenes and writes a timeline: the camera every frame, and every sound, effect, mark and damage event with its time. Feel Lab measures latency, kick, shake, presence, match and smoothness from it, and judges each item of an 82-item checklist. It never runs your game: any engine can write the timeline (docs/TIMELINE.md).
The checklist
Group | Items | Measured from a timeline |
A. Shooting (your own gun) | 19 | 9 |
B. Hitting (your bullets land) | 15 | 6 |
C. Getting hit (damage taken) | 9 | 4 |
D. Movement and the body | 11 | 2 |
E. Interacting with the world | 7 | 0 |
F. Enemies (zombies) | 5 | 0 |
G. Explosions, fire and the world | 5 | 1 |
H. Sound mix | 4 | 0 |
I. Screen and comfort | 4 | 0 |
J. Smoothness (feel breaks when the frame does) | 3 | 1 |
Items no timeline can show (a colour-blind option, a reload cancel's timing) are left for a person, with what to
look for. feellab checklist prints them all.
Related MCP server: ellmos Blender Use MCP
What it measures
Measure | Example |
Latency | the shot's flash and sound on the shot's frame; the hit marker within 50 ms of the hit |
Sync | the shot's sound within 45 ms of its flash (ITU-R BT.1359) |
Kick | the camera turns at least 0.3 degrees on a burst and settles within 0.6 s |
Shake | a blast 5 m away shakes the view; one 50 m away at least 3 times less |
Presence | every impact has an effect, a sound and a mark; every round fired ejects a case |
Rhythm | footsteps at walking cadence (about 100 steps a minute and up); the head bobs |
Smoothness | no frame twice the median length round a shot or a blast |
Every rule names its source. A range from game practice rather than evidence is marked as an estimate.
Try it
pip install feellab-mcp
feellab demo demo
feellab judge demoThe demo writes timelines for two made-up games: "Juicy" passes every measured item; "Bare" (a debug dot where a round lands, no shake, silent steps) fails 17.
Use it in your game
Have your probe play the scenes in
src/feellab/data/scenes.jsonand write one timeline each (docs/TIMELINE.md). Wrap the calls that start sounds and effects so each is recorded with its time; note the moments with no sound or effect of their own (a shot, an impact, a hit marker, damage, a flinch).Record a camera frame before the scene's cause (a shot, a hit, a blast): kick and flinch are measured from it.
Tag what you can (
"tags": ["muzzle"]). Where your asset names do not say what a sound or effect is for, put afeel_rules.jsonbeside the timelines:{"dry": "slidelock"}tells Feel Lab that a sound named after a slide lock is the click of an empty gun.feellab judge <folder>, orgate_rowsfor a gate.
The first game to use it (ToangTown) found 52 failing cases on four guns: a debug dot where a round lands, no shake anywhere, no blood, no footsteps, a climb that never comes back, a stall on the first shot.
Tools
Tool | What it does |
| The checklist by group: what the player should get, measured or for a person. |
| The standard scenes a probe plays. |
| Every metric: scene, unit, rule and source. |
| A timeline file against the contract. |
| A folder of timelines judged: each item's values and verdict, and a Markdown report. |
| The metrics as rows for a gate (Weapon Lab's row format). |
{"mcpServers": {"feellab": {"command": "feellab-mcp"}}}FEELLAB_OUT is the only folder Feel Lab writes to (its reports); ~/.feellab by default.
Where it came from
Feel Lab was built for ToangTown, an Unreal 5.8 co-op zombie FPS, next to Weapon Lab (weaponlab-mcp), whose Gate can judge Feel Lab's rows as cases.
License
MIT
Available Tools
6 toolscheck_timelineC
A timeline file against the contract (feellab-timeline/1): every problem, or none.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does add one useful behavioral detail: the result is 'every problem, or none,' indicating an exhaustive error report. However, it does not state whether the tool is read-only, what permissions it needs, or how the problems are formatted, leaving significant gaps for a check operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but it is not a complete sentence and omits essential information for invoking the tool correctly. Its brevity reflects under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations, output schema, and schema parameter descriptions, the description should carry much more of the context. It communicates the tool's broad intent and a hint about the return value, but is missing usage guidance, parameter clarification, and behavioral details needed for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the single 'path' parameter is undocumented in both the schema and the description. The description mentions 'a timeline file' but never explains what the path parameter should point to or how it is interpreted, so it adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (a timeline file) and the contract (feellab-timeline/1), and the tool name 'check_timeline' supplies the verb. It is clear enough for an agent to distinguish from siblings like list_checklist or judge_folder, though the description itself is a fragment rather than a complete statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any preconditions or exclusions. The description only states what it checks, leaving the agent to infer the appropriate context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gate_rowsC
The metrics as rows for a gate (Weapon Lab's row format): subject, scene, metric, value.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | Yes | ||
| subject | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations and no output schema exist, so the description carries the full behavioral burden, and it only partially meets it by naming four row columns. It says nothing about whether this is a read or write, permissions, errors on missing folder/subject, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is structurally fine, but the brevity is under-specification rather than discipline — the sentence is too short for a tool with two required, undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% parameter coverage, the description should explain inputs and behavior, but it explains neither. The 'Weapon Lab row format' reference is unexplained jargon an agent cannot act on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with two required parameters (folder and subject), and the description never explains what either accepts. The bare word 'subject' appears only inside the row-format list, not as parameter guidance, so the agent gets no semantic help for its two mandatory inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('metrics as rows for a gate') and hints at the row shape, so the agent knows roughly what is produced, but it is a noun phrase with no verb and never distinguishes itself from the sibling list_metrics or judge_folder. It reads more like an output-format note than a statement of what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of when to prefer this over list_metrics or judge_folder. An agent must guess from the name alone which sibling to call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
judge_folderB
Each subject's scenes judged against the checklist: every measured item's values, rules and verdict, a summary, and a Markdown report written beside them.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | Yes | a folder of <subject>_<scene>_timeline.json files | |
| subject | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden. It does disclose one meaningful side effect - a Markdown report is 'written beside' the input files - which is real context beyond the schema. However, it omits whether judging requires an LLM/API cost, permissions, whether outputs overwrite existing reports, and where exactly files land, leaving significant gaps for a write-producing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single, front-loaded sentence with a colon-enumerated output list and no filler. The phrasing is slightly fragmented/grammatically loose, but nothing is wasted and the key action leads.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return-value burden - and it does list the judged artifacts and the Markdown report. But for a complex judging tool with no annotations and an undocumented optional parameter, it stops short of the behavioral and routing context an agent would need to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: 'folder' is documented in the schema, but the optional 'subject' parameter has no description anywhere. The phrase "Each subject's scenes" hints at the subject concept but never explains that 'subject' is a filter parameter or what format it takes, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a real action (judging scenes) and its resource (a folder of subject/scene timelines), and enumerates the outputs: measured values, rules, verdict, summary, and a Markdown report. This is clear enough for an agent to understand intent, but it never distinguishes itself from close siblings like check_timeline or gate_rows, which the agent must pick between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the alternatives (check_timeline, gate_rows, list_scenes). No prerequisites, no input assumptions, no exclusion criteria are given, so the agent must infer placement among siblings on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_checklistC
The checklist: every interaction, what the player should get, and how it is checked (measured or by a person).
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | A to J, or leave out for all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the shape of the content (interaction, expected result, verification type) but says nothing about read-only nature, permissions, pagination, or result format. For a listing tool with zero annotation coverage this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no padding. It is slightly awkwardly phrased, but every clause earns its place by describing checklist content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description partially compensates by sketching the return content, which is the main gap. It still fails to explain the group filter's domain (what A–J correspond to) or confirm the operation is a safe read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — the single group parameter is documented as 'A to J, or leave out for all'. The description adds no additional meaning about what a group represents, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (the checklist) and describes its contents — every interaction, expected player outcome, and verification method — which is more informative than a bare restatement of the name. However, there is no explicit verb and no differentiation from siblings like list_scenes or list_metrics, so an agent must infer that this is a read/list operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of the optional group filter, and no routing to or away from the sibling list tools. The agent is left to guess when this checklist view is preferable to list_scenes or list_metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_metricsB
Every metric: its scene, unit, which way is better, its rule and the rule's source (estimate or evidence).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the shape of each returned record (scene, unit, direction, rule, rule source), which is genuine value, but it says nothing about side effects, permissions, pagination, or volume limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single telegraphic sentence with no filler, and the scope ('Every metric') is front-loaded. It reads as a fragment rather than a complete sentence, which slightly hurts readability but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so describing the returned fields is exactly the right content, and it covers the salient ones for a metric. Missing details are minor: ordering, pagination, and whether any filtering is possible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There is no parameter semantics for the description to clarify or omit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource and its scope ('Every metric') and enumerates the attributes returned, so an agent knows this is an unfiltered enumeration of metrics. It does not differentiate from siblings like list_scenes or list_checklist, but the name and returned fields make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, no when-not-to-use, and no mention of alternatives among the sibling list tools. The only clue is the word 'Every', implying an unfiltered dump, but the agent must infer that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scenesD
The standard scenes a probe plays, one timeline each, and what each asks it to do.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state that the tool is read-only, does not mention return format, ordering, pagination, or any side effects—only vaguely alludes to scene contents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence fragment that is under-specified rather than genuinely concise. It does not front-load a verb or action, and the sentence structure lacks the clarity expected of a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema and no annotations, the description should at least state that it returns a list and describe the return structure. It hints at scene contents ('one timeline each, and what each asks it to do') but omits the fundamental action and return format, leaving it incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to document. The baseline score for a no-parameter tool is 4 according to the rubric.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun phrase ('The standard scenes a probe plays...') that defines the content of the scenes but never states an action like 'Lists' or 'Returns'. It does not clearly distinguish this tool from siblings such as list_checklist or list_metrics, and it reads more like a data definition than a tool purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, when not to use it, or which alternatives exist. The description provides no context for selection among the sibling list tools.
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.
6 tool updates
v0.1.0- First observed
check_timeline - First observed
gate_rows - First observed
judge_folder - First observed
list_checklist - First observed
list_metrics - First observed
list_scenes
TDQS
Scored across 6 tools
The three list_* tools clearly target distinct resources (checklist, scenes, metrics), and check_timeline vs judge_folder differ in scope (single file validation vs folder-level judging). Minor overlap between check_timeline and judge_folder since both involve evaluation, but descriptions separate them adequately.
Five of six tools follow a clean verb_noun pattern (list_checklist, list_scenes, list_metrics, check_timeline, judge_folder). gate_rows deviates in form, but it's a single minor exception rather than a systematic inconsistency.
Six tools is well-scoped for an evaluation/QA framework: three listing tools plus three analysis tools. Each tool earns its place with no redundancy or padding.
The surface covers the inspection lifecycle: enumerating resources (checklist, scenes, metrics), validating timelines, judging folders, and emitting gate rows. The toolset is read/analysis-oriented, so authoring or updating checklists/metrics/scenes is absent, but that appears intentional for this domain.
Related MCP Connectors
Measures your site in a real browser and returns verifiable observations, with evidence and limits.
Test the voice agents you run: scored transcripts, pass/fail verdicts, latency and WER metrics.
Read and score Opik traces, experiments, datasets and prompts from your AI assistant.
Calibrated judgments for text: yes/no probabilities, picks from your options, or scores.
Related MCP Servers
- AlicenseAqualityCmaintenanceLoudness compliance verdicts against formal broadcast standards (EBU R128, ATSC A/85). Measures audio/video with ffmpeg and returns a pass/fail verdict with exact deltas and remediation parameters.297 PyPI1MIT
- AlicenseBqualityBmaintenanceEnables headless Blender asset QA and FBX reimport verification for game and 3D asset pipelines, checking mesh count, material count, and naming prefixes with deterministic JSON results.338 npm2MIT
- AlicenseNot gradedqualityBmaintenanceEnables inspecting ONNX models, probing the deployment environment, and benchmarking inference latency and FPS either locally or on remote SSH targets such as Linux workstations and Jetson devices. Benchmark results are validated against FPS, P95 latency and model-size constraints to produce PASS/FAIL deployment gates.47 npmMIT
- AlicenseNot gradedqualityAmaintenanceTurns silent defects in AI-generated video and audio — wrong speaking pace, mismatched loudness, truncation, dead air, late captions, broken layout — into hard assertion failures inside tests and CI. Enables agents to check individual files or whole output directories against platform presets, returning pass/fail exit codes and human-readable bug reports instead of raw measurements.44 PyPIMIT