NewAgent Observability is live.
Back to directory
Split.io logo

Split.io MCP server: there is none, and Harness FME is the route

Why the splitio organization has no server, which thirteen resource types cover feature flags, and why one call can reach two different APIs.

Connector
Official, but Harness's rather than Split's
Coverage
13 FME resource types: flags, segments, environments
Tools
11 generic tools dispatch to 240 resource types
Biggest risk for an agent
An agent can kill a feature flag

Last verified 1 September 2026 · from The harness/mcp-server repository, the GitHub API and the hosted endpoint

This page is one of 90 in a directory of monitoring and developer tools. Each page checks what an AI coding agent can get out of the tool through its MCP server, the connector that lets the agent query the tool directly.

Summary

Split.io has no MCP server. A GitHub search of the splitio organization for MCP repositories returned zero results on 25 August 2026.

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

Eleven generic tools dispatch to 240 resource types, of which thirteen are `fme_` resources: workspaces, environments, feature flags, segments and traffic types.

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.ioComplete. Every FME operation is available here
harness/mcp-server, native modePass org_id and project_id. Harness endpointsNarrower. 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 behind Harness toolsets this page does not name
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 onlyPartial. fme_rollout_status lists, and there are no metrics behind it
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, and no tool name from it is listed on this page

Split.io lets an agent read and change a flag in one conversation, including killing it. Nothing in the FME resource set explains what the flag did to your metrics.

What can an AI agent do with Split.io?

11 tools in total, dispatching across 240 resource types, 13 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 25 August 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 connecting costs before the first question

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

Thirteen resource types are arguments to eleven tools, not thirteen 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. 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. There is no Split MCP server to find.

There is no Split MCP server, and searching for one wastes the first afternoon.

A GitHub search of the splitio organization for MCP repositories returned zero results on 25 August 2026. Split is Harness FME, and the coverage lives in harness/mcp-server.

The Harness README does not lead with Split either. FME appears as thirteen resource types inside a 240-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 240 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

    Thirty-nine of forty are on by default. HARNESS_TOOLSETS accepts -name to drop defaults and +name to add the opt-in ansible set.

  5. 5

    Watch the native-mode gaps

    fme_workspace is legacy-only, and native environment names are capped at 15 characters.

Paste this into your agent’s instructions

One tool name covers 240 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.

Where the question is which flag moved a metric, Statsig and Eppo answer it and no fme_ resource does.

If Harness is already your delivery platform, the 39 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 13 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>"}}}}

The key is `servers`, not `mcpServers`. VS Code is the only client that uses that name, and copying a config from anywhere else fails silently.

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

There is no MCP server in the splitio organization
Correct, and there was none on 25 August 2026. Split is Harness FME, and coverage comes from harness/mcp-server.
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
Thirty-nine of forty toolsets load by default. HARNESS_TOOLSETS accepts a comma-separated list, with -name to remove a default and +name to add the opt-in ansible set.

Split.io MCP server: Reference

ItemValue
Split's own serverNone. Zero MCP repositories in the splitio organization
Covering serverharness/mcp-server · MIT · 93 stars · pushed 1 September 2026
Hosted endpointhttps://mcp.harness.io/mcp, HTTP 401 unauthenticated
Tools11, dispatching to 240 resource types
FME resource types13
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
Toolsets39 of 40 on by default. ansible is opt-in
Transportsstdio and HTTP, with Docker and Kubernetes routes
Inventory sourceThe repository README, read 25 August 2026

What engineers report

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

What was checkedWhat it shows
Split MCP repositories0
Harness server stars91
Harness server licenseMIT
Tools11
Resource types240
FME resource types13
Toolsets on by default39 of 40

“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.”

The splitio GitHub organization was searched for MCP repositories on 25 August 2026 and returned zero results. Tool names, resource types and environment variables come from the harness/mcp-server README read on the same date, and the hosted endpoint was probed then too.

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 thirteen 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, from $10 per million spans.

See agent observability

Frequently asked questions

Does Split.io have an MCP server?

No. A search of the splitio GitHub organization for MCP repositories returned zero results on 25 August 2026. Split is now Harness FME.

How is Split covered then?

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

How many tools does that server have?

Eleven, dispatching to 240 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

  • 31 August 2026. harness/mcp-server v3.2.22 released, the most recent version.
  • 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 this page traces to one of these

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

Split.io’s own MCP documentation

Feature flags elsewhere:

Also release and delivery: