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.
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:
| Route | What it is | State |
|---|---|---|
The splitio GitHub organization | No MCP repository at all | Zero results on 25 August 2026 |
harness/mcp-server, legacy mode | Pass workspace_id. Calls go to api.split.io | Complete. Every FME operation is available here |
harness/mcp-server, native mode | Pass org_id and project_id. Harness endpoints | Narrower. 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 work | What Split.io has here | Can an agent reach it |
|---|---|---|
| Code, tests & review | Nothing FME-specific | No. No fme_ resource reaches code or reviews. Pull requests sit behind Harness toolsets this page does not name |
| CI & release | Feature flags, segments, environments and rollout status | Yes. Full for FME. Flags can be listed, created, updated, killed, restored, reallocated and archived |
| Production observability | Rollout status only | Partial. fme_rollout_status lists, and there are no metrics behind it |
| Agent observability & evals | None | No traces or evaluations of model behavior |
| AI cost management | Nothing FME-specific | No. 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 set | Tools | Tokens (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 documented | 11 | 202 to 311 | 203 to 312 | 912 to 983 | 0.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
Pick one scoping mode per call
Legacy passes
workspace_id, native passesorg_idwithproject_id. Passing both is a documented error. - 2
Expect a second credential in legacy mode
HARNESS_FME_API_KEYis a Split admin key or an FME-entitled Harness token, because those calls go directly toapi.split.io. - 3
Set
HARNESS_READ_ONLYfor evaluationIt blocks create, update, delete and execute, leaving only list and get.
- 4
Trim the toolsets
Thirty-nine of forty are on by default.
HARNESS_TOOLSETSaccepts-nameto drop defaults and+nameto add the opt-inansibleset. - 5
Watch the native-mode gaps
fme_workspaceis 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.
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.
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.
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.
{"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.
[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.
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.
{"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.
{"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.
{"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.
{"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.
{"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.
{"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.
{"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.
{"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.
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.
{"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.
{"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.
{"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.
{"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.
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.
{"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.
{"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.
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_flagsupports execute actionskill,restore,reallocate,archiveandunarchive. A kill changes production behavior immediately.HARNESS_READ_ONLYis the mitigation, and it is off by defaultIt blocks create, update, delete and execute, leaving list and get.
Legacy mode holds a second credential
HARNESS_FME_API_KEYis a Split admin key or an FME-entitled Harness token, and it authenticates directly againstapi.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_TOOLSETSif 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_idtogether withorg_idorproject_id, or mixingorg_idwithproject_idalone, 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_idvalues. - 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.
nameandisProductioncannot be cleared. - Legacy calls are rejected on the hosted endpoint
- Those requests go to
api.split.iodirectly, so hosted Harness credentials do not authenticate them. They needHARNESS_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_TOOLSETSaccepts a comma-separated list, with-nameto remove a default and+nameto add the opt-inansibleset.
Split.io MCP server: Reference
| Item | Value |
|---|---|
| Split's own server | None. Zero MCP repositories in the splitio organization |
| Covering server | harness/mcp-server · MIT · 93 stars · pushed 1 September 2026 |
| Hosted endpoint | https://mcp.harness.io/mcp, HTTP 401 unauthenticated |
| Tools | 11, dispatching to 240 resource types |
| FME resource types | 13 |
| Flag actions | kill, restore, reallocate, archive, unarchive |
| Scoping modes | Legacy workspace_id · native org_id plus project_id |
| Legacy target | api.split.io, with HARNESS_FME_API_KEY |
| Read-only mode | HARNESS_READ_ONLY, off by default |
| Toolsets | 39 of 40 on by default. ansible is opt-in |
| Transports | stdio and HTTP, with Docker and Kubernetes routes |
| Inventory source | The 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 checked | What it shows |
|---|---|
| Split MCP repositories | 0 |
| Harness server stars | 91 |
| Harness server license | MIT |
| Tools | 11 |
| Resource types | 240 |
| FME resource types | 13 |
| Toolsets on by default | 39 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.”
“FME calls go directly to api.split.io, so hosted OAuth/service-routing credentials for Harness platform APIs do not authenticate these requests.”
“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_executeonfme_feature_flagcan 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 observabilityFrequently 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.