AI apps, REST API, SDK, and CLI
Connect assistants over MCP or build organization-scoped automations with REST v1.
Which connection do I need?
Two ways to let an AI work with EveryFeed — both live in Settings → Developers → Access:
| CLI & AI Skills | MCP Client Configuration | |
|---|---|---|
| Best for | Coding agents in your terminal or IDE — OpenClaw, Claude Code, Codex, Cursor, Gemini CLI | Chat apps that can't run commands — ChatGPT, claude.ai, Claude Desktop |
| What happens | The agent runs everyfeed CLI commands on your machine, guided by the EveryFeed skill | The app calls EveryFeed's hosted MCP tools over the internet |
| Setup | Install the CLI and skill, sign in once | Paste one URL, approve access |
A terminal agent can use MCP too, but the skill gives it a complete, guided workflow — start there. Building software instead? REST API v1 and the TypeScript SDK are covered below.
AI apps can connect to MCP with OAuth. Your workspace also has one evf_ API
key for REST API v1, the SDK, the CLI, and MCP clients that need manual
credentials.
Create access
Open Settings → Developers → Access.
Under MCP Client Configuration, use OAuth (Recommended):
- Copy the MCP server URL into ChatGPT, Claude, Codex, Claude Code, or another MCP client.
- Choose Connect or Authenticate in the client.
- Sign in to EveryFeed and approve access to the workspace you want to use.
The client registers itself automatically, so this flow does not require an API key or a manually created OAuth app.
Choose API Key (Manual) only when a client does not support MCP OAuth. Pick your client and the page generates the exact configuration with your workspace key filled in:
| Client | Where the generated config goes |
|---|---|
| Claude Code | A claude mcp add … command, run in the terminal |
| Cursor | .cursor/mcp.json |
| VS Code / Copilot | .vscode/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Amp | Amp settings.json |
| Codex | ~/.codex/config.toml |
| Gemini CLI | ~/.gemini/settings.json |
| Warp | Warp Settings → MCP Servers |
Below the client configs, CI / Remote Servers offers a key-in-URL MCP
endpoint (…/mcp/<key>) for clients and CI systems that can't send an
Authorization header — the key is part of the URL, so treat the whole URL
as a secret.
Your API key is created automatically and remains available on the same page. You can reveal, copy, or rotate it whenever you need to. The Access page is visible to organization managers only.
For OpenClaw or another Agent Skills client, install the public skill and connect the CLI. Install the CLI:
npm install -g everyfeedConnect your account:
everyfeed auth loginThen install the skill for your agent:
npx skills add VoltAgent/everyfeed-agentThe CLI opens EveryFeed in your browser. Sign in, choose an organization, and approve the device shown in your terminal.
If you are building an integration for other EveryFeed users, create an OAuth app under Settings → Developers → Apps.
Use an existing AI assistant
ChatGPT
Connect with OAuth, then manage EveryFeed in natural language.
Claude
Add the EveryFeed MCP server to Claude and prepare posts by chat.
Codex
Add the EveryFeed MCP server to Codex and start a new task.
Cursor
Install the EveryFeed skill and CLI, or connect over MCP.
Gemini CLI
Install the EveryFeed skill and CLI, or connect over MCP.
OpenClaw
Install the EveryFeed skill and CLI for OpenClaw.
Other coding agents
Any other Agent Skills client, plus CI usage.
REST API v1
The base path is:
https://api.everyfeed.ai/public/v1Send the token as a Bearer credential:
curl \
--header "Authorization: Bearer $EVERYFEED_TOKEN" \
"https://api.everyfeed.ai/public/v1/connections?limit=25"Available resources include connections, posts, posts/validate, media,
and media/import — and the surface goes further: per-connection analytics and
top posts, scheduling-slot lookup (posts/next-slot), post statistics, media
upload and AI image/video generation, and notifications. List endpoints return
an opaque nextCursor; pass it back unchanged to continue. API access requires
an active subscription.
Connection results include group: { id, name } when a channel belongs to a
client group, or null when it is unassigned. Pass groupId=GROUP_UUID to
GET /connections to keep a cursor-safe list scoped to one client.
Idempotency is mandatory for writes
Every write endpoint — POST /posts, POST /media/import, state changes,
deletes, media generation — requires an Idempotency-Key header. Reusing a
key with the same payload returns the original result; reusing it with
different input is rejected.
TypeScript SDK
When @everyfeed/sdk is available in your workspace:
import { EveryFeedClient } from "@everyfeed/sdk";
const everyfeed = new EveryFeedClient({
baseUrl: "https://api.everyfeed.ai",
token: process.env.EVERYFEED_TOKEN!,
});
const connections = await everyfeed.connections.list({
groupId: "CLIENT_GROUP_UUID",
limit: 25,
});
const connection = connections.data[0];
if (!connection) throw new Error("Connect a channel first");
const validation = await everyfeed.posts.validate({
posts: [
{
connectionId: connection.id,
values: [{ message: "EveryFeed API is connected." }],
},
],
});CLI
Connect your EveryFeed account in the browser:
everyfeed auth login
everyfeed api connections list
everyfeed api connections list --group-id "CLIENT_GROUP_UUID"
everyfeed api posts list --state DRAFT --limit 25
everyfeed api media list --type image
npx skills add VoltAgent/everyfeed-agentUse --manual-token to enter the workspace API key yourself. For a
non-interactive environment, pass it through --token-stdin or set
EVERYFEED_API_TOKEN outside the command.
api posts create validates first, and both post creation and media import ask
for confirmation. Non-interactive or JSON writes require --yes and a stable
--idempotency-key.