Skip to main content
Glama

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 demo

The 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

  1. Have your probe play the scenes in src/feellab/data/scenes.json and 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).

  2. Record a camera frame before the scene's cause (a shot, a hit, a blast): kick and flinch are measured from it.

  3. Tag what you can ("tags": ["muzzle"]). Where your asset names do not say what a sound or effect is for, put a feel_rules.json beside the timelines: {"dry": "slidelock"} tells Feel Lab that a sound named after a slide lock is the click of an empty gun.

  4. feellab judge <folder>, or gate_rows for 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

list_checklist

The checklist by group: what the player should get, measured or for a person.

list_scenes

The standard scenes a probe plays.

list_metrics

Every metric: scene, unit, rule and source.

check_timeline

A timeline file against the contract.

judge_folder

A folder of timelines judged: each item's values and verdict, and a Markdown report.

gate_rows

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 tools
check_timelineC

A timeline file against the contract (feellab-timeline/1): every problem, or none.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

C2.6/5.0
Behavior3/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderYes
subjectYes

TDQS

C2.2/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderYesa folder of <subject>_<scene>_timeline.json files
subjectNo

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNoA to J, or leave out for all

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.9/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose2/5

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.

Usage Guidelines1/5

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.

  1. 6 tool updatesv0.1.0
    • First observedcheck_timeline
    • First observedgate_rows
    • First observedjudge_folder
    • First observedlist_checklist
    • First observedlist_metrics
    • First observedlist_scenes

TDQS

C2.9/5.0

Scored across 6 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Loudness 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.
    2
    97 PyPI
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Turns 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 PyPI
    MIT