NewAgent Observability — find failures before customers do.
Back to directory
Split.io logo

Split.io MCP server: now part of Harness Feature Management

Why Split's coverage lives in the Harness server, which nineteen resource types cover flags and experiments, and why one call can reach two different APIs.

Connector
Via Harness's server
Coverage
Flags, segments, metrics, experiments
Tools
11 generic tools
Biggest risk for an agent
An agent can kill a flag

Checked 3 October 2026 · from The harness/mcp-server repository, the GitHub API and the hosted endpoint

One of 91 guides to monitoring and developer tools. Each covers what an AI coding agent can get out of the tool through MCP, the protocol that lets the agent query the tool directly.

Summary

Split has not published an MCP server of its own as of 3 October 2026. The splitio GitHub organization holds no MCP repository. A community server, kud/mcp-harness-fme, has 1 star and was last pushed on 23 September 2026.

Split is now Harness FME, and the Harness server covers it. harness/mcp-server is MIT licensed, carries 105 stars, and was last pushed on 3 October 2026.

Eleven generic tools dispatch to 260 resource types, of which nineteen are `fme_` resources: workspaces, environments, feature flags, segments, traffic types, metrics and experiments.

Two scoping modes reach two different APIs. A legacy call passes workspace_id and hits api.split.io. A newer call passes org_id and project_id together and hits Harness-native endpoints. Mixing them on one call is an error.

What is the Split.io MCP server?

Split was a feature flag and experimentation platform. Harness acquired it, and it now ships under the name Harness FME. FME is the Harness name for the feature flag and experimentation product Split used to be. Flags, segments and traffic types are the same concepts under a new name.

Most MCP servers publish one tool per API endpoint. The Harness repository states why it does not: for a platform this broad that would mean 240 or more tools, and models get worse at tool selection as the count grows.

So the model sees eleven verbs, not hundreds of nouns. The agent calls harness_schema or harness_describe on a resource type first, then passes that resource type to harness_list, harness_get or harness_execute, and the server routes the call.

Where a Split question actually goes:

RouteWhat it isState
The splitio GitHub organizationNo MCP repository at allZero results on 25 August 2026
harness/mcp-server, legacy modePass workspace_id. Calls go to api.split.ioOlder resources only. Metrics, experiments and the new segment types are native-only
harness/mcp-server, native modePass org_id and project_id. Harness endpointsThe newer route. fme_workspace has no native equivalent

The repository states that passing both workspace_id and org_id or project_id on one call is an error, as is mixing org_id with project_id alone. Pick one mode per call.

Feature flags sit in release, and the wider Harness server reaches further than Split ever did.

Part of the workWhat Split.io has hereCan an agent reach it
Code, tests & reviewNothing FME-specificNo. No fme_ resource reaches code or reviews. Pull requests sit in other Harness toolsets
CI & releaseFeature flags, segments, environments and rollout statusYes. Full for FME. Flags can be listed, created, updated, killed, restored, reallocated and archived
Production observabilityRollout status, metrics and experiment resultsPartial. fme_experiment_result lists per-metric results for an experiment's latest calculation run, with no history
Agent observability & evalsNoneNo traces or evaluations of model behavior
AI cost managementNothing FME-specificNo. No fme_ resource reaches spend. The wider Harness server carries a Cloud Cost Management toolset for cloud spend, which is a different budget

Split.io lets an agent read and change a flag in one conversation, including killing it. Native mode adds experiment results, but only from the latest calculation run.

What can an AI agent do with Split.io?

11 tools in total, dispatching across 260 resource types, 19 of which are FME.

Reading7
harness_listharness_getharness_searchharness_describeharness_schemaharness_statusharness_diagnose
Writing4Write
harness_createharness_updateharness_deleteharness_execute

Read from the harness/mcp-server README on 3 October 2026. These eleven are the whole tool list: the resource type is an argument, not a separate tool. HARNESS_READ_ONLY blocks create, update, delete and execute, leaving list and get.

What the tool definitions cost in context

A client that loads every tool definition at the start of a session spends this much context before the first question. Claude Code defers definitions by default through tool search, and loads a tool's definition when the agent needs it. The method below gives the version and date measured.

A context window is the amount of text a model can hold at once. Split has not published a server of its own, so the measurement is of the Harness server, the connector that reaches Split's flags. Its tools cost 912 to 983 tokens on Claude.

Nineteen FME resource types are arguments to eleven tools, not nineteen extra tools. The tool list costs 912 to 983 tokens on Claude however many resource types exist.

Tool setToolsTokens (GPT-5.6, GPT-5.5)Tokens (GPT-4, GPT-3.5)Tokens (Claude Haiku 4.5 to Opus 5)Share of a 200,000-token window
Every tool documented11202 to 311203 to 312912 to 9830.1% to 0.5%

Encodings: GPT-5.6, GPT-5.5 o200k_base; GPT-4, GPT-3.5 cl100k_base; Claude Haiku 4.5 to Opus 5 count_tokens. Measured on or before 1 September 2026.

Counted from the 11 tool entries in the vendor's own documentation. That is the only public inventory.

The server could not be run for a live tools/list. So no input schemas are available. These figures cover each tool's name and description only. They are a floor, not the figure.

The Claude columns are measured through the API's count_tokens endpoint, with an empty schema per tool. So they cover the same content as the GPT columns. The range there is two tokenizer generations. Haiku 4.5 and Opus 4.6 sit at the low end. Opus 5 and Sonnet 5 sit at the high end. The gap between them is about a tenth.

Split.io MCP server limits: where answers come back incomplete

The first limit costs time before setup starts: a search under Split's own name finds little.

Searching under the Split name misses where the coverage lives.

The splitio GitHub organization held no MCP repository on 3 October 2026. Split is Harness FME, and the official coverage lives in harness/mcp-server.

The Harness README does not lead with Split either. FME appears as nineteen resource types inside a 260-type registry.

Guard: Search for FME rather than Split, and start from the Feature Flags resource table.

The agent says: “I disabled the flag.” `kill` is an execute action on a live flag.

fme_feature_flag supports kill, restore, reallocate, archive and unarchive through harness_execute, and nothing in the tool name says which resource is being acted on.

Guard: Set HARNESS_READ_ONLY unless writes are the point, and require approval on harness_execute.

The agent says: “I will scope the call to the workspace and the project.” That combination is an error.

The two modes reach different APIs. Legacy workspace_id calls go to api.split.io, native calls go to Harness endpoints, and the repository states that mixing them on one call fails.

Guard: Decide the mode once, and put it in the agent's instructions rather than leaving it to inference.

The agent says: “I called `harness_get`.” On which of 260 resource types?

Eleven tools cover the whole platform. The repository is explicit that this is deliberate: one tool per endpoint would mean 240 or more tools, and models get worse at tool selection as the count grows.

Guard: Log the resource type alongside the tool name, as the disclosure block above requires.

How to configure Split.io MCP for agents

  1. 1

    Pick one scoping mode per call

    Legacy passes workspace_id, native passes org_id with project_id. Passing both is a documented error.

  2. 2

    Expect a second credential in legacy mode

    HARNESS_FME_API_KEY is a Split admin key or an FME-entitled Harness token, because those calls go directly to api.split.io.

  3. 3

    Set HARNESS_READ_ONLY for evaluation

    It blocks create, update, delete and execute, leaving only list and get.

  4. 4

    Trim the toolsets

    Forty-two of forty-six are on by default. HARNESS_TOOLSETS accepts -name to drop defaults and +name to add an opt-in set such as ansible.

  5. 5

    Prefer native mode for new work

    fme_workspace is legacy-only, but metrics, experiments and fme_segment are native-only. Native environment names are capped at 15 characters.

Paste this into your agent’s instructions

One tool name covers 260 resource types across two APIs, so the tool call alone does not say what happened or where.

Terminal
When you answer using Harness FME MCP tools, state:
- The resource type you acted on, not only the tool name.
  harness_execute on fme_feature_flag is not the same as
  harness_get.
- Which scoping mode you used: workspace_id, which reaches
  api.split.io, or org_id with project_id, which reaches
  Harness.
- Whether the call changed a flag. kill, restore, reallocate,
  archive and unarchive all change live behavior.
Never state that data does not exist. State the resource type
and the scope you queried.
Write your answer in ASD-STE100 Simplified Technical
English. Use short sentences with one idea in each.

Do you need the MCP server at all?

Not for scheduled work. The Split admin API is unchanged and remains the direct route there, using the same admin key legacy mode needs.

For feature flags without the rest of a delivery platform, Flagsmith and Statsig both publish servers scoped to flags alone.

For the question of which flag moved a metric, fme_experiment_result reads only the latest calculation run. Statsig and Datadog Experiments expose experiment results through their own servers.

If Harness is already your delivery platform, the 42 default toolsets make this one connection rather than several.

With MCP, a flag can be found, read and changed in one conversation, without the tab-switching the admin UI requires.

Filter the toolsets to feature-flags and set read-only first. Add writes when you know which resource types you need.

Split.io MCP server setup

There is nothing from Split to install. The connector is the Harness MCP server, available as a hosted endpoint at https://mcp.harness.io/mcp or run yourself over stdio, Docker or Kubernetes.

Every block below carries a Harness API key. The account ID is read automatically from a Harness personal access token or service account token, so no separate account setting is needed.

Legacy workspace_id calls need HARNESS_FME_API_KEY as well, because those requests go directly to api.split.io and Harness platform credentials do not authenticate them.

Claude Code, hosted

The managed endpoint. HARNESS_BASE_URL does not affect it, so a self-managed Harness host needs the self-run route instead.

Terminal
claude mcp add --transport http harness \
  https://mcp.harness.io/mcp \
  --header "Authorization: Bearer <harness-api-key>"

Read-only for an evaluation

HARNESS_READ_ONLY blocks every mutating operation: create, update, delete and execute. Only list and get remain, which is the right posture while working out what the 19 FME resource types cover.

Terminal
HARNESS_READ_ONLY=true \
HARNESS_TOOLSETS=feature-flags \
HARNESS_API_KEY=<harness-api-key> \
  harness-mcp-server stdio

Cursor

~/.cursor/mcp.json for all projects, or .cursor/mcp.json in one, carrying the same Harness API key.

Terminal
{"mcpServers":{"harness":{"type":"http",
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}

Codex CLI

Codex reads TOML, so the JSON blocks above will not transfer.

Terminal
[mcp_servers.harness]
url = "https://mcp.harness.io/mcp"

[mcp_servers.harness.headers]
Authorization = "Bearer <harness-api-key>"

Every other client

Each block below is the configuration for one client, with the file path and the key that client expects.

Legacy Split workspaces

Only needed for workspace_id calls. The repository states those requests go directly to api.split.io, so hosted Harness credentials do not authenticate them, and that this variable must not be set in multi-user mode.

Terminal
HARNESS_API_KEY=<harness-api-key> \
HARNESS_FME_API_KEY=<split-admin-key> \
  harness-mcp-server stdio
Claude Desktop

macOS ~/Library/Application Support/Claude/claude_desktop_config.json. Windows %APPDATA%\Claude\claude_desktop_config.json. There is no CLI. Edit through Settings, Developer, Edit Config.

Quit and restart fully for changes to load. The repository names Claude Desktop as a stdio client, so the local binary route is the documented one and the key travels in env.

Terminal
{"mcpServers":{"harness":{
  "command":"harness-mcp-server","args":["stdio"],
  "env":{"HARNESS_API_KEY":"<harness-api-key>"}}}}
Gemini CLI

~/.gemini/settings.json globally, or .gemini/settings.json per project. Key mcpServers, using httpUrl, carrying the same Harness API key.

Terminal
{"mcpServers":{"harness":{
  "httpUrl":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
VS Code Copilot

.vscode/mcp.json per workspace, or your user profile. CLI: code --add-mcp.

Terminal
{"servers":{"harness":{"type":"http",
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}

`.vscode/mcp.json` takes the key `servers`. VS Code also reads mcpServers from a portable .mcp.json at the project root or ~/.copilot/mcp-config.json. Its docs recommend the portable files for new servers.

Windsurf

~/.codeium/windsurf/mcp_config.json, which is the path Windsurf documents. Key mcpServers, carrying the same Harness API key.

Terminal
{"mcpServers":{"harness":{
  "serverUrl":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
Zed

~/.config/zed/settings.json, under context_servers, carrying the same Harness API key.

Terminal
{"context_servers":{"harness":{
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
Google Antigravity

~/.gemini/config/mcp_config.json globally, or .agents/mcp_config.json per project. Key mcpServers. There is no CLI. Use the /mcp overlay. Streamable HTTP is supported, carrying the same Harness API key.

Terminal
{"mcpServers":{"harness":{"type":"http",
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
Amp (Sourcegraph)

~/.config/amp/settings.json or .amp/settings.json, carrying the same Harness API key. The amp mcp CLI covers approve, doctor and oauth.

Terminal
{"amp.mcpServers":{"harness":{
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
Cline

~/.cline/mcp.json per the docs. The source also reads ~/.cline/data/settings/cline_mcp_settings.json. Key mcpServers, carrying the same Harness API key.

Terminal
{"mcpServers":{"harness":{"type":"streamableHttp",
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
Goose (Block)

~/.config/goose/config.yaml, carrying the same Harness API key in the headers map.

Terminal
extensions:
  harness:
    type: streamable_http
    uri: https://mcp.harness.io/mcp
    headers:
      Authorization: Bearer <harness-api-key>
Kiro (AWS)

.kiro/settings/mcp.json per workspace, or ~/.kiro/settings/mcp.json globally. Kiro runs stdio servers, so the local binary route applies, carrying the same Harness API key in env.

Terminal
{"mcpServers":{"harness":{
  "command":"harness-mcp-server","args":["stdio"],
  "env":{"HARNESS_API_KEY":"<harness-api-key>"}}}}
Warp

~/.warp/.mcp.json or .warp/.mcp.json. Key mcpServers, carrying the same Harness API key. Also addable through the /agent-add-mcp skill.

Terminal
{"mcpServers":{"harness":{
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
JetBrains Junie

.junie/mcp/mcp.json per project, or ~/.junie/mcp/mcp.json. Key mcpServers, carrying the same Harness API key. Use /mcp in the CLI to manage.

Terminal
{"mcpServers":{"harness":{"type":"http",
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
Roo Code

.roo/mcp.json per project. The global file is mcp_settings.json, opened from the Roo Code MCP settings view with Edit Global MCP. Key mcpServers, carrying the same Harness API key.

Terminal
{"mcpServers":{"harness":{
  "type":"streamable-http",
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
Continue

.continue/mcpServers/*.yaml, one file per server, carrying the same Harness API key.

Terminal
name: Harness
version: 0.0.1
schema: v1
mcpServers:
  - name: harness
    type: streamable-http
    url: https://mcp.harness.io/mcp
    requestOptions:
      headers:
        Authorization: Bearer <harness-api-key>
Trae

.trae/mcp.json per project, or paste into the UI under Raw Config (JSON). Key mcpServers, standard shape, carrying the same Harness API key.

Terminal
{"mcpServers":{"harness":{
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
Devin

Devin has no config file to edit. Servers are added through a web form in the settings UI, and Devin's documentation states you do not need to write or paste JSON. The block below is the shape those fields describe, shown for reference. The repository names Devin Desktop as a stdio client, and either route uses the same Harness API key.

Terminal
{"mcpServers":{"harness":{"type":"http",
  "url":"https://mcp.harness.io/mcp",
  "headers":{
    "Authorization":"Bearer <harness-api-key>"}}}}
Self-managed Harness

Set HARNESS_BASE_URL to your own Harness host when running the server yourself. The repository notes it has no effect on the managed endpoint, carrying the same Harness API key.

Terminal
HARNESS_BASE_URL=https://harness0.harness.io \
HARNESS_API_KEY=<harness-api-key> \
  harness-mcp-server stdio

Read-only access, permissions and security

  • An agent can kill a feature flag

    fme_feature_flag supports execute actions kill, restore, reallocate, archive and unarchive. A kill changes production behavior immediately.

  • HARNESS_READ_ONLY is the mitigation, and it is off by default

    It blocks create, update, delete and execute, leaving list and get.

  • Legacy mode holds a second credential

    HARNESS_FME_API_KEY is a Split admin key or an FME-entitled Harness token, and it authenticates directly against api.split.io.

  • That variable is forbidden in multi-user mode

    The repository states it must not be set there, because FME must use each session's own credentials.

  • Thirty-nine toolsets are on by default

    Feature flags arrive beside CI/CD, GitOps, Cloud Cost Management, Security Testing and Chaos Engineering. Those are toolset names, not tool names: the surface stays at eleven tools whatever loads. Filter with HARNESS_TOOLSETS if flags are all you need.

Troubleshooting

The splitio organization holds no MCP repository
Expected as of 3 October 2026. Split is Harness FME, and coverage comes from harness/mcp-server. The community kud/mcp-harness-fme also talks to FME directly.
A call errors when it names both a workspace and a project
Documented. Passing workspace_id together with org_id or project_id, or mixing org_id with project_id alone, is an error. Pick one scoping mode per call.
`fme_workspace` returns nothing in native mode
It is legacy-only. The repository states there is no Harness-native equivalent, and that it exists to discover workspace_id values.
Creating an environment fails on the name
Native mode caps environment names at 15 characters. Native update is a JSON Merge Patch, so you send only the fields you change. name and isProduction cannot be cleared.
Legacy calls are rejected on the hosted endpoint
Those requests go to api.split.io directly, so hosted Harness credentials do not authenticate them. They need HARNESS_FME_API_KEY, which cannot be set in multi-user mode.
Too many unrelated tools appear
Forty-two of forty-six toolsets load by default. HARNESS_TOOLSETS accepts a comma-separated list, with -name to remove a default and +name to add one of the four opt-in sets.

Split.io MCP server: Reference

ItemValue
Split's own serverNot published as of 3 October 2026. No MCP repository in the splitio organization
Covering serverharness/mcp-server · MIT · 105 stars · pushed 3 October 2026
Community serverkud/mcp-harness-fme · MIT · 1 star · 38 tools · pushed 23 September 2026
Hosted endpointhttps://mcp.harness.io/mcp, HTTP 401 unauthenticated
Tools11, dispatching to 260 resource types
FME resource types19
Flag actionskill, restore, reallocate, archive, unarchive
Scoping modesLegacy workspace_id · native org_id plus project_id
Legacy targetapi.split.io, with HARNESS_FME_API_KEY
Read-only modeHARNESS_READ_ONLY, off by default
Toolsets42 of 46 on by default. ansible is one of four opt-in sets
Transportsstdio and HTTP, with Docker and Kubernetes routes
Inventory sourceThe repository README, read 3 October 2026

What engineers report

The record here is the repository, which explains its own design decisions in unusual detail: 105 stars, MIT licensed, 11 tools across 260 resource types. Public discussion adds little to that.

What was checkedWhat it shows
MCP repositories in splitio0
Harness server stars105
Harness server licenseMIT
Tools11
Resource types260
FME resource types19
Toolsets on by default42 of 46

“Most MCP servers map one tool per API endpoint. For a platform as broad as Harness, that means 240+ tools, and LLMs get worse at tool selection as the count grows. Context windows fill up with schemas, and every new endpoint means new code.”

harness/mcp-server README, GitHub, 25 August 2026 · The stated reason for eleven generic tools rather than one per endpoint.

“FME calls go directly to api.split.io, so hosted OAuth/service-routing credentials for Harness platform APIs do not authenticate these requests.”

harness/mcp-server README, GitHub, 25 August 2026 · Why legacy Split workspaces need a second credential that the hosted endpoint cannot supply.

“Block all mutating operations (create, update, delete, execute). Only list and get are allowed.”

Tool names, resource types and environment variables come from the harness/mcp-server README read on 3 October 2026, when the splitio organization still listed no MCP repository. The hosted endpoint returned HTTP 401 the same day. The quotes above date from 25 August 2026.

Should you connect an agent to Split.io?

Yes. Best for flag inspection and rollout questions, with HARNESS_TOOLSETS narrowed and writes gated.

Strongest fit
Teams already on Harness who want flags, pipelines and cost in one connection rather than several.
Main advantage
Eleven tools instead of hundreds, with a documented read-only switch and toolset filtering.
Main weakness
Split coverage is nineteen resource types inside somebody else's platform, split across two scoping modes with different capabilities.
Operational risk
harness_execute on fme_feature_flag can kill a flag in production, and read-only is off by default.

From Oodle

One platform for agent traces and infrastructure

Agent traces usually sit in a different product from the rest of your telemetry, so when a slow database makes an agent slow the symptom is in one tool and the cause is in another. Oodle keeps both in one query surface.

See agent observability

Frequently asked questions

Does Split.io have an MCP server?

Not one of its own. As of 3 October 2026 the splitio GitHub organization holds no MCP repository. Split is now Harness FME, covered by the official Harness server.

How is Split covered then?

Through harness/mcp-server, which exposes 19 fme_ resource types covering workspaces, environments, feature flags, segments, traffic types, metrics and experiments.

How many tools does that server have?

Eleven, dispatching to 260 resource types. The repository states this is deliberate, because models get worse at tool selection as the tool count grows.

What are the two scoping modes?

Legacy passes workspace_id and reaches api.split.io. Native passes org_id and project_id together and reaches Harness endpoints. Mixing them on one call is an error.

Is there a read-only mode?

Yes. HARNESS_READ_ONLY blocks create, update, delete and execute, leaving list and get. It defaults to false.

Can an agent turn off a feature flag?

Yes. fme_feature_flag supports kill, restore, reallocate, archive and unarchive as execute actions, so gate harness_execute behind approval.

Changelog

  • 3 October 2026. README now lists 260 resource types, 19 of them FME, and 42 of 46 toolsets on by default. Metrics, experiments and experiment results are native-mode only.
  • 29 September 2026. harness/mcp-server v3.2.31 released.
  • 31 August 2026. v3.2.22 released.
  • 24 August 2026. v3.2.21 released.
  • 30 May 2025. First release, v1.0.0-beta.
  • 14 May 2025. harness/mcp-server created on GitHub.

Sources

Every number on the page traces to one of these

  1. harness/mcp-server README · read 25 August 2026 and 3 October 2026
  2. GitHub API · repository facts, kud/mcp-harness-fme and a search of the splitio organization, 3 October 2026
  3. Live check · POST https://mcp.harness.io/mcp returned HTTP 401, 3 October 2026

Split.io’s own MCP documentation

Feature flags elsewhere:

Also release and delivery: