feat: wire native FME traffic type and rollout status lists - #838
Conversation
List already existed on the Split Admin contract, so keep workspace_id dual-mode and add the public v4 org/project paths instead of dropping legacy. Co-authored-by: Cursor <cursoragent@cursor.com>
|
|
Map size to Java limit, promote totalCount/data to total/items, and lock Harness auth in tests so v4 lists are not sent to Split. Co-authored-by: Cursor <cursoragent@cursor.com>
Java SegmentKind and EnvironmentListResponse are uppercase paginated contracts. MCP listed/created with lowercase type and dropped totalCount.
This reverts commit df868f3.
| displayName: "FME Rollout Status", | ||
| description: | ||
| "Rollout status definitions for a workspace (e.g. Killed, Permanent, Ramping). Use to discover valid rollout_status_id UUIDs for filtering fme_feature_flag lists. Note: this endpoint may not be available on all account types — rollout status IDs are also returned inline with fme_feature_flag list results.", | ||
| "Rollout status definitions (e.g. Killed, Permanent, Ramping). Dual-mode list: org_id+project_id (Harness-native GET /fme/api/v4/rollout-statuses) or deprecated workspace_id (Split Admin). Use to discover rollout_status_id UUIDs for filtering fme_feature_flag lists. Native response is {data, limit, offset, totalCount}; each item is {type: \"ROLLOUT_STATUS\", id, name, description?}. List-only — no get/create/update/delete.", |
There was a problem hiding this comment.
Let's avoid exposing the details of endpoint in the description.
| displayName: "FME Traffic Type", | ||
| description: | ||
| "Traffic type in a workspace (e.g. 'user', 'account'). List traffic types to discover traffic_type_id values needed for identity queries and flag/segment creation.", | ||
| "Traffic type (e.g. 'user', 'account'). Dual-mode list: org_id+project_id (Harness-native GET /fme/api/v4/traffic-types) or deprecated workspace_id (Split Admin). Use to discover traffic_type_id / name values for flag and segment create. Native items are {type: \"TRAFFIC_TYPE\", id, name} — no displayAttributeId. List-only — no get/create/update/delete.", |
There was a problem hiding this comment.
Same here let's avoid exposing the details of the underlying end points. Provide details of tool.
Also it is clear that is listing and has not GET/CREATE etc
Remove API path and response envelope details from the resource description per review feedback; keep dual-mode scoping guidance. Co-authored-by: Rohan Gupta <thisrohangupta@users.noreply.github.com>
Replace resource description with tool-focused wording: list-only via harness_list, dual-mode scoping, and pagination. Removes underlying API path and Split Admin references per review feedback. Co-authored-by: Rohan Gupta <thisrohangupta@users.noreply.github.com>
Review asked for MCP tool semantics (scope, pagination, item fields), not HTTP paths or list-only restatement.
Review asked for tool semantics (scope and pagination), not wire-shape fields such as displayAttributeId. Co-authored-by: Cursor <cursoragent@cursor.com>
|
@cursor Can you resolve the merge conflicts and push? |
|
I've successfully resolved the merge conflicts and pushed the changes. What I did:
Current status:
The PR is now ready for further review and can be merged when approved. |


Description
Follow-up to #806: wire existing
fme_traffic_type.listandfme_rollout_status.listto public v4 when callers passorg_id+project_id. Legacyworkspace_idSplit Admin paths stay (dual-mode). These lists already existed in MCP; this PR does not drop them.Get/create/update/delete are not added — the registry still only exposes
list(agents discover that from the tool surface, not from description restatement).Dual-mode routing — this PR only
workspace_id)org_id+project_id)fme_traffic_typeGET /fme/api/v4/traffic-types)fme_rollout_statusGET /fme/api/v4/rollout-statuses)Native contracts
offset/limit(default 100, max 100).harness_listsizemaps tolimit.fmeV4PaginatedListExtractpromotesdata→itemsandtotalCount→total(not a raw passthrough envelope).workspace_id+org_id/project_idis rejected by the existing dual-mode helper.Tool-facing descriptions cover dual-mode scope, how to use
harness_list, and pagination. They do not include HTTP paths, list-only restatement, or native payload field names (displayAttributeId,{data, totalCount}, etc.). README still documents the native item fields for humans.feature-flag-rolloutstep 4 listsfme_rollout_statusin native mode (no longer treated as NYI).Key implementation changes
src/registry/toolsets/feature-flags.ts— dual-moderouteResolverfor both list ops; descriptions kept tool-facing.src/registry/extractors.ts—fmeV4PaginatedListExtract.src/prompts/feature-flag-rollout.ts— native rollout-status list is usable.tests/registry/feature-flags.test.ts— native/legacy routing, FME scope params, and description guards (no HTTP paths / List-only / Native items /displayAttributeId).Type of Change
Checklist
tests/registry/feature-flags.test.ts(fme_traffic_type and fme_rollout_status dual-mode list)Coding Standards (registry-driven MCP model)
server.registerTool()calls — existingfeature-flagstoolset extendedoperationPolicyon every changed endpointsrc/registry/extractors.tsidentifierFieldsandscopedeclaredconsole.log()insrc/Test plan
/fme/api/v4/traffic-typesand/fme/api/v4/rollout-statuseswithorganization_identifier/project_identifier/internal/api/v2/...pathsharness_listagainst QA withorg_id+project_idfor both resource types