Public leaderboard

Public assessment

flipt-io/mcp-server-flipt (@flipt-io/mcp-server-flipt)

flipt-io-mcp-server-flipt · v0.1.0 · scanned

What changed in the harness

Selection accuracy 95→98, token cost up 21%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

19.8 / 30

19.8 out of 30
03Economics

18.2 / 20

18.2 out of 20
04Discoverability

9.8 / 20

9.8 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

28 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
list_namespaces
no_return_description
Lists all namespaces in the Flipt instance, which are used to group flags and segments. Returns an array of namespace objects (key, name, description).
create_namespace
params_unexplained no_return_description
Creates a new namespace to group related flags and segments. 'key' is the unique identifier for the namespace, 'name' is its human-readable display name, and 'description' is optional free-text documentation. Returns the created namespace object.
update_namespace
params_unexplained no_return_description
Updates the namespace identified by 'key', setting its display 'name' and optional 'description'. Returns the updated namespace object.
delete_namespace
params_unexplained no_return_description
Deletes the namespace identified by 'key'. Returns no content on success.
list_flags
params_unexplained no_return_description
Lists all feature flags within the namespace identified by 'namespaceKey'. Returns an array of flag objects.
get_flag
params_unexplained no_return_description
Retrieves the flag identified by 'flagKey' within the namespace 'namespaceKey'. Returns the flag object, including its variants and rules.
create_flag
params_unexplained no_return_description
Creates a new feature flag in the namespace 'namespaceKey'. 'key' is the unique flag identifier, 'name' is its display name, 'description' is optional documentation, 'enabled' sets whether the flag is active, and 'type' specifies BOOLEAN_FLAG_TYPE or VARIANT_FLAG_TYPE. Returns the created flag object.
update_flag
params_unexplained no_return_description
Updates the flag identified by 'key' in namespace 'namespaceKey', setting its 'name', optional 'description', and 'enabled' state. Returns the updated flag object.
delete_flag
params_unexplained no_return_description
Deletes the flag identified by 'key' from namespace 'namespaceKey'. Returns no content on success.
toggle_flag
params_unexplained no_return_description
Enables or disables the flag identified by 'flagKey' in namespace 'namespaceKey' by setting 'enabled' true or false. Returns the updated flag object.
list_segments
params_unexplained no_return_description
Lists all segments within the namespace identified by 'namespaceKey'. Returns an array of segment objects.
get_segment
params_unexplained no_return_description
Retrieves the segment identified by 'segmentKey' within namespace 'namespaceKey'. Returns the segment object, including its constraints.
create_segment
params_unexplained no_return_description
Creates a segment in namespace 'namespaceKey' used to group entities by matching constraints for targeting. 'key' is the unique segment identifier, 'name' is its display name, 'description' is optional documentation, and 'matchType' sets whether ALL_MATCH_TYPE or ANY_MATCH_TYPE of its constraints must match. Returns the created segment object.
update_segment
params_unexplained no_return_description
Updates the segment identified by 'key' in namespace 'namespaceKey', setting its 'name', optional 'description', and 'matchType' (whether all or any constraints must match). Returns the updated segment object.
delete_segment
params_unexplained no_return_description
Deletes the segment identified by 'key' from namespace 'namespaceKey'. Returns no content on success.
evaluate_boolean_flag
params_unexplained no_return_description
Evaluates a boolean flag identified by 'flagKey' in namespace 'namespaceKey' for the entity 'entityId', optionally using key-value 'context' attributes for rule matching. Returns the evaluation result, including whether the flag is enabled for that entity.
evaluate_variant_flag
params_unexplained no_return_description
Evaluates a variant flag identified by 'flagKey' in namespace 'namespaceKey' for the entity 'entityId', optionally using key-value 'context' attributes for rule matching. Returns the evaluation result, including which variant, if any, matched.
evaluate_batch
params_unexplained no_return_description
Evaluates multiple flag requests in one call. 'requests' is an array of objects, each with 'namespaceKey', 'flagKey', 'entityId', and optional 'context' attributes. Returns an array of evaluation results, one per request, in order.
create_constraint
params_unexplained no_return_description
Adds a constraint to the segment 'segmentKey' in namespace 'namespaceKey', used to match entities based on context attributes. 'type' sets the comparison data type (string, number, boolean, datetime, or entity ID), 'property' is the context field compared, 'operator' is the comparison operator (e.g. eq, neq, contains), 'value' is the value compared against, and 'description' is optional documentation. Returns the created constraint object.
delete_constraint
params_unexplained no_return_description
Deletes the constraint identified by 'constraintId' from segment 'segmentKey' in namespace 'namespaceKey'. Returns no content on success.
create_variant
params_unexplained no_return_description
Creates a variant on the variant-type flag 'flagKey' in namespace 'namespaceKey'. 'key' is the unique variant identifier, 'name' is an optional display name, 'description' is optional documentation, and 'attachment' is an optional JSON payload returned with the variant. Returns the created variant object.
delete_variant
params_unexplained no_return_description
Deletes the variant identified by 'variantId' from flag 'flagKey' in namespace 'namespaceKey'. Returns no content on success.
create_rule
params_unexplained no_return_description
Creates a targeting rule on flag 'flagKey' in namespace 'namespaceKey' that matches entities in segment 'segmentKey'. 'rank' sets the rule's evaluation order, and 'segmentOperator' sets whether OR_SEGMENT_OPERATOR or AND_SEGMENT_OPERATOR logic applies across referenced segments. Returns the created rule object.
delete_rule
params_unexplained no_return_description
Deletes the rule identified by 'ruleId' from flag 'flagKey' in namespace 'namespaceKey'. Returns no content on success.
create_distribution
params_unexplained no_return_description
Attaches a variant distribution to the rule 'ruleId' on flag 'flagKey' in namespace 'namespaceKey'. 'variantId' is the variant being distributed, and 'rollout' is the percentage (0-100) of matching entities that receive it. Returns the created distribution object.
delete_distribution
params_unexplained no_return_description
Removes the distribution identified by 'distributionId' (for variant 'variantId') from rule 'ruleId' on flag 'flagKey' in namespace 'namespaceKey'. Returns no content on success.
create_rollout
params_unexplained no_return_description
Creates a rollout rule for the boolean flag 'flagKey' in namespace 'namespaceKey', evaluated in order of 'rank' with optional 'description'. Provide either 'segment' ('segmentKey' plus the boolean 'value' returned when it matches) or 'threshold' ('percentage' plus the boolean 'value' returned for that percentage of entities). Returns the created rollout object.
delete_rollout
params_unexplained no_return_description
Deletes the rollout identified by 'rolloutId' from flag 'flagKey' in namespace 'namespaceKey'. Returns no content on success.

Selection evidence

Confusable tool pairs.

8 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
evaluate_boolean_flag evaluate_variant_flag high Identical schemas (namespaceKey/flagKey/entityId/context) with empty descriptions; the agent must already know whether the target flag is BOOLEAN_FLAG_TYPE or VARIANT_FLAG_TYPE to pick correctly, and a task like 'evaluate flag X for user Y' gives no such signal.
create_distribution create_rollout high Both implement percentage-based delivery of a flag value to users (distribution assigns % of a rule's matches to a variant; rollout assigns % threshold/segment for a flag), so a task like 'roll out this value to 50% of users' plausibly maps to either tool depending on flag type, which isn't stated.
update_flag toggle_flag medium update_flag's optional 'enabled' field duplicates toggle_flag's purpose; a task like 'enable flag X' could be satisfied by either tool, with toggle_flag being simpler (no required name) but update_flag also capable of the same state change.
create_constraint create_rule medium Both define targeting conditions (constraint = property match criteria on a segment; rule = attaching a segment to a flag) with empty descriptions to disambiguate, so a task like 'add a targeting condition based on country=US' could plausibly trigger either call.
list_flags get_flag low A task naming a specific flag ('show me flag X') could be handled by listing all flags and filtering instead of calling get_flag directly, especially with no description clarifying get_flag's single-item purpose.
list_segments get_segment low Same list-vs-get ambiguity as flags: a task referencing one segment by name could be resolved via list_segments plus filtering rather than the more direct get_segment call.
evaluate_boolean_flag evaluate_batch low evaluate_batch's request items omit any type field and can serve a single evaluation wrapped in an array, so a single-flag evaluation task could plausibly be routed through the batch tool instead of the dedicated boolean evaluator.
evaluate_variant_flag evaluate_batch low Same overlap as with evaluate_boolean_flag: evaluate_batch can trivially handle a single variant flag evaluation, creating mild ambiguity over which tool a single-evaluation task should use.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard