CONNECT APP
Build with Eppo
Eppo is the only platform that enables trustworthy, self-serve experimentation and feature management for every team: from simple A/B tests and rollout flags to AI personalization and marketing incrementality tests.
Data Analytics
- API key
MCP
Give your agent Eppo tools
Every Eppo action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's Eppo account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "eppo",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Create Experiment:
const result = await mcp.callTool({
name: "eppo-create-experiment",
arguments: {
name: "Name",
experimentKey: "Experiment Key",
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "eppo",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Create Experiment:
result = await session.call_tool("eppo-create-experiment", {
"name": "Name",
"experimentKey": "Experiment Key",
})API PROXY
Call the Eppo API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Eppo API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://eppo.cloud/api/v1/definitions",
})
// Any allowed Eppo endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://eppo.cloud/api/v1/definitions
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9lcHBvLmNsb3VkL2FwaS92MS9kZWZpbml0aW9ucw?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Eppo actions from your backend
Connect a user's Eppo account once, then run Create Experiment on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "eppo-create-experiment",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
eppo: { authProvisionId: "apn_xxxxxxx" },
name: "Name",
experimentKey: "Experiment Key",
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="eppo-create-experiment",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"eppo": {"authProvisionId": "apn_xxxxxxx"},
"name": "Name",
"experimentKey": "Experiment Key",
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "eppo-create-experiment",
"configured_props": {
"eppo": { "authProvisionId": "apn_xxxxxxx" },
"name": "Name",
"experimentKey": "Experiment Key"
}
}'TOOLS
Eppo actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Create Experiment
actionCreate a new experiment analysis in Eppo. Use List Experiments first to find validentityIdandassignmentSourceIdvalues — these numeric IDs are not available separately and must be copied from an existing experiment. Use List Metrics to find metric IDs to attach to the experiment.experimentKeymust be a unique slug matching the assignment logging key in your codebase. IMPORTANT:variationsis a JSON array where each object requiresvariant_key,is_active, andis_controlfields. Exactly one variation must haveis_control: true. Example variations:[{"variant_key": "control", "name": "Control", "is_active": true, "is_control": true}, {"variant_key": "treatment", "name": "Treatment", "is_active": true, "is_control": false}]. IMPORTANT:metricsis a JSON array of objects withmetric_id(integer) andis_primary(boolean) fields. Exactly one metric must haveis_primary: true. Example metrics:[{"metric_id": 333870, "is_primary": true}]. Dates must be ISO 8601 format:2024-01-01T00:00:00Z. See the documentationWritev0.0.2 -
Create Feature Flag
actionCreate a new feature flag in Eppo with a unique key, display name, entity ID, variations, and optional tags. Use this when the user wants to add a new feature flag. Thekeymust be a unique URL-safe slug (e.g.my-new-feature). Duplicate keys are rejected by the API. IMPORTANT: Each variation requiresvariant_key(unique slug) andtype(must beSTRING,INTEGER, orJSON— uppercase). Do NOT usekeyorvaluefields. Example:[{"variant_key": "on", "type": "STRING", "name": "On"}, {"variant_key": "off", "type": "STRING", "name": "Off"}]. Use List Feature Flags to verify the flag was created. See the documentationWritev0.0.2 -
Get Experiment Results
actionRetrieve full details and analysis results for a single experiment, including outcome, winning variant key, key takeaways, and per-metric results. Use this when the user asks about experiment performance, results, or analysis for a specific experiment. Use List Experiments first to find the numericexperimentId— Eppo uses integer IDs for experiment lookups. SetallowDeletedtotrueto include soft-deleted experiments in the response. See the documentationRead-onlyv0.0.2 -
Get Feature Flag
actionRetrieve full details for a single feature flag including its allocation rules, assignment configuration, and variations. Use this tool when the user asks about a specific flag's configuration or assignment logic. Use List Feature Flags first to find the numericflagId— Eppo uses integer IDs, not string keys, for flag lookups. See the documentationRead-onlyv0.0.2 -
List Experiments
actionRetrieve all experiments in Eppo with their name, key, status, entity ID, and assignment source ID. Use this to discover experiment IDs for Get Experiment Results, or findentity_idvalues needed to create new experiments. Filter bytype(all,experiments, orholdouts),experimentKey,entityId,tagNames,isDeleted,updatedSince, orcreatedSinceto narrow results. SetwithCalculatedMetricsorwithFullCupedDatato include additional metric data in the response. See the documentationRead-onlyv0.0.2 -
List Feature Flags
actionRetrieve all feature flags in Eppo with their name, key, enabled status, and allocation configuration. Use this tool when a user wants to see all flags, find a specific flag by name, or discover flag IDs needed by Get Feature Flag or Toggle Feature Flag. SetincludeArchivedto also return archived flags. See the documentationRead-onlyv0.0.2 -
List Metrics
actionRetrieve all metrics defined in Eppo, including their names, IDs, descriptions, and minimum detectable effects. Use this tool to discover available metrics or find metric IDs needed when creating an experiment with Create Experiment. Filter byentityIdto scope results to a specific entity type, or bynameto find metrics by partial name match. SetincludeExperimentstotrueto include associated experiments in the response (requireslimit≤ 10). Supports pagination vialimitandoffset. See the documentationRead-onlyv0.0.2 -
Toggle Feature Flag
actionEnable or disable a feature flag in a specific environment in Eppo. Use this when the user wants to turn a flag on or off in Production, Test, or another environment. Use List Feature Flags or Get Feature Flag first to find the numericflagIdand to discover validenvironmentIdvalues from the flag'senvironmentsarray. See the documentationWritev0.0.2 -
Upsert Metric
actionCreate or update a metric in Eppo. OmitmetricIdto create a new metric; providemetricIdto update an existing one. Use this when the user wants to define a new KPI/metric or update the definition of an existing metric. Use List Metrics to find the numericmetricIdfor an update and to look up theentityIdfrom existing metrics.entityIdis required — find it in theentity_idfield of any existing metric returned by List Metrics. TheminimumDetectableEffectis a decimal representing the smallest meaningful relative change (e.g.0.05for 5%). Provide exactly one metric definition:numerator(standard or ratio metrics),percentile, orfunnelAggregation. For ratio metrics, also providedenominator. Setdenominatorto the JSON literalnullfor non-ratio metrics. IMPORTANT:metric_event_measure_idis a data-source ID from your Eppo data pipeline configuration — obtain it from your Eppo workspace's data integration settings. It is NOT the same as a metric ID or aggregation ID. The Eppo API requires the full numerator/percentile/funnel definition even for metadata-only updates. See the documentation - Create Metric and See the documentation - Update MetricWritev0.0.2
No Eppo triggers are available yet.
- App slug
- eppo
- Authentication
- API key
- Categories
- Data Analytics
- Actions
- 9
- Triggers
- 0
- API proxy
- Available