Announcing CIMD support for MCP Client registration
Learn more

Metricool MCP vs Metricool API for AI Agents (2026)

TL;DR

  • Metricool's hosted MCP server is available on every Metricool plan including Free. The REST API is gated to Advanced and Custom plans. For a multi-tenant agent, that means the API path silently excludes any customer below Advanced.
  • MCP auth supports OAuth 2.1 with a browser consent flow, or a static header token. The REST API documents exactly one mechanism: a per-user userToken in an X-Mc-Auth header, with userId and blogId on every call. No OAuth, no scopes, no documented expiry.
  • Both paths grant full account access. Metricool's own connect guide states that MCP permissions are "similar to logging in directly." There is no read-only mode on either path, so tool-surface reduction is the only enforcement point you control.
  • Scalekit ships one Metricool connector, metricoolmcp, on OAuth 2.1 with Dynamic Client Registration (DCR). It exposes seven tools covering brands, analytics, best-time-to-post, and the full scheduled-post lifecycle.
  • Neither path stores, rotates, or revokes credentials for you. Scalekit's Metricool MCP connector handles the OAuth flow, per-tenant vaulting, and refresh, so the MCP vs API decision does not change your auth infrastructure.

Your agent needs to schedule social posts and read engagement data out of Metricool. Metricool ships a hosted MCP server at https://ai.metricool.com/mcp and a REST API at https://app.metricool.com/api. Most tool comparisons in this series end with the same shape: MCP is OAuth-only and interactive, the API gives you headless auth options. Metricool inverts that. The MCP path is where the real OAuth flow lives, and the REST API is the static-secret path. Here is how to pick.

What Metricool MCP and Metricool API actually are

These are two separate products at Metricool, not two views of the same one. They are gated differently, authenticated differently, and documented in different places.

Metricool MCP

Metricool maintains an official MCP server. The production endpoint is https://ai.metricool.com/mcp, reachable over HTTP by any MCP-capable client. Authentication happens two ways: an OAuth sign-in where the user approves access from the client, or a static token supplied as METRICOOL_USER_TOKEN and METRICOOL_USER_ID, or as an X-Mc-Auth header. Metricool documents Mistral's connector setup as OAuth 2.1 specifically. The server source is public as metricool/mcp-metricool on GitHub and published to PyPI, which is what powers the local stdio variant. Metricool's MCP documentation hub is the entry point, and the connection guide covers client-by-client setup.

Metricool API

The Metricool REST API has a base URL of https://app.metricool.com/api. Every endpoint requires three things: the userToken in an X-Mc-Auth header, plus userId and blogId as query parameters. The token is a per-user authorization code copied from Account Settings, and the section only appears on Advanced and Custom plans. Metricool positions the API around exporting metrics to warehouses and BI tools, and automating scheduling from external platforms. The endpoint reference lives in the Metricool API documentation, also available as a downloadable Swagger file.

Comparing them where it matters for agents

Four dimensions decide this: what the agent can call, what credential it holds, what you operate, and which plan your customers are on. The last one is doing more work here than in any other tool in this series.

What your agent can actually do

Scalekit's Metricool MCP connector publishes seven tools. Metricool does not publish a tool table for the hosted endpoint, and points to the GitHub repository as the reference list. That README enumerates 28 tools, most of them network-specific reads like Instagram Reels or TikTok videos.

Capability
Metricool MCP (via the Scalekit connector)
Metricool API
List brands and connected networks
Yes (metricoolmcp_getbrandsettings)
Yes
Discover available analytics metrics
Yes (metricoolmcp_getanalyticsavailablemetrics)
Yes
Pull analytics over a date range
Yes (metricoolmcp_getanalyticsdatabymetrics)
Yes
Best time to post per network
Yes (metricoolmcp_getbesttimetopostbynetwork)
Yes
List scheduled posts
Yes (metricoolmcp_getscheduledposts)
Yes
Create a scheduled post
Yes (metricoolmcp_createscheduledpost)
Yes
Update a scheduled post
Yes (metricoolmcp_updatescheduledpost)
Yes
Ads data (Meta Ads, Google Ads, TikTok Ads)
Yes, through the analytics metric tools
Yes
Competitor posts and benchmarking
Not in this tool set; present in the open-source package
Yes
Pinterest board listing
Not in this tool set; present in the open-source package
Yes
Bulk export into a warehouse or BI tool
No
Yes
Real-time change events
Not documented
Not documented
Works on the Free plan
Yes
No, Advanced or Custom only

Where the consolidated tool surface helps and where it bites

The hosted surface is deliberately compressed. Instead of one tool per network per content type, getanalyticsavailablemetrics discovers what is queryable for a given network and connector, and getanalyticsdatabymetrics fetches it by Data Studio field ID. That is the correct shape for an LLM. Two tools with a discovery step beat twenty near-identical tools that all look plausible to a model choosing between them.

The cost is indirection. Your agent must run a discovery call before it can query anything, and the metric IDs it gets back are opaque strings. For a deterministic reporting pipeline that already knows which fields it wants, that round trip is pure overhead, and the REST API is the shorter path.

The auth path each one puts you on

This is where Metricool diverges from Slack, GitHub, and Notion. On those platforms, MCP constrains you to OAuth and the API opens up headless options. On Metricool, the MCP server is the only path that offers a real delegated authorization flow.

MCP auth: OAuth 2.1, or a header token when you need one

The hosted server supports a browser-based OAuth sign-in where the user approves access from their client. It also accepts a static token, either as environment variables for the local package or as an X-Mc-Auth header for clients like N8N. Scalekit's connector uses the OAuth 2.1 path with Dynamic Client Registration (DCR), which is what you want for a multi-tenant product: each user completes their own consent, and you never handle their token.

One caveat worth planning around. Metricool's own guide notes that the token-based connection option routes through the API and therefore requires Advanced. The OAuth path is the one that works on Free.

API auth: one static per-user token, no scopes, no expiry

The REST API has no authorization server. Your customer opens Account Settings, copies a userToken, and pastes it into your product. That token is a long-lived bearer secret with no documented expiry, no scope parameter, and no per-brand restriction. It authenticates as the user across everything their account can reach.

For a B2B agent this is a bad artifact to hold. You are asking a customer to hand over a credential equivalent to their password, you are storing it indefinitely, and the only revocation mechanism is the user regenerating it, which breaks every other integration they have wired to it at the same time. This is exactly why static credentials break in production systems.

Why plan gating is an architectural constraint, not a billing detail

Metricool's MCP vs API comparison is explicit: MCP works on any plan including Free, and the API is Advanced or Custom only. If you build your agent exclusively on the REST API, every prospect on Free, Starter, or the tiers below Advanced cannot use your product until they upgrade.

That is a conversion problem disguised as a technical choice. The MCP path removes it. Plan limits still apply after connection, so a Free-plan user is capped at 20 scheduled posts and 30 days of analytics history, but the integration itself works. Design your agent to degrade against those limits rather than to require an upgrade before first value.

What you own in production

On the MCP path, Metricool owns hosting, tool schemas, and the consent screen. Your agent picks up new tools when Metricool ships them, without a redeploy. What stays yours: per-user token storage, refresh handling, revocation detection, and tenant isolation. None of that is managed by the transport.

On the REST path you own everything above, plus endpoint selection, the userId and blogId plumbing on every call, pagination, retries, and the response shaping that turns raw JSON into something an LLM can reason about. Metricool's dashboard does expose API usage and endpoint history, which is useful for spotting a runaway agent, but it is observability after the fact, not a control.

Schema stability and the versioning gap

Neither path gives you a version pin. The MCP tool schemas change when Metricool updates the hosted server, and the REST API documentation is distributed as a Swagger file rather than a dated version header. If an unplanned schema change is an incident for you, build a contract test against the tools your pipeline depends on and run it on a schedule.

This is a genuine argument for the REST path in narrow cases. A fixed set of endpoints that you call the same way every night is a more predictable dependency than a managed tool contract you do not control, even without formal versioning on either side.

When to use MCP, when to use the API

The split is cleaner here than for most tools, because the plan gate and the credential shape both point the same direction for user-facing products.

Use Metricool MCP when:

  • You are building a multi-tenant product where customers connect their own Metricool account and you cannot require an Advanced plan as a precondition
  • Your agent schedules, edits, and reports on content, which is the full span of the seven-tool surface
  • You want a real consent flow with per-user attribution rather than a pasted secret in a settings form
  • You are running an interactive assistant in Claude, Cursor, ChatGPT, or your own chat surface where the user is present

Use the Metricool API directly when:

  • You are exporting analytics in bulk into a warehouse, Looker Studio, or a BI tool where the MCP tool shape adds nothing
  • You need competitor benchmarking or Pinterest board data that the hosted tool set does not expose
  • You are running a single-tenant internal pipeline against your own Advanced-plan account, where a static token is an acceptable operational risk
  • Your pipeline is fully deterministic, knows its endpoints in advance, and gets no value from a discovery round trip

The credential problem that exists on both paths

Whichever path you pick, you end up holding one Metricool credential per user. The transport changes the token type. It does not change the infrastructure you have to build around it.

The N-credential math for a multi-brand agent

Metricool is a multi-brand product by design. An agency customer with 24 brands is one Metricool account with 24 blogId values, and your agent needs correct per-user credentials before it can address any of them. Forty agency customers is forty credentials to store encrypted, isolate per tenant, refresh, and invalidate on churn.

The failure mode is quiet. A token revoked in Metricool's settings does not notify your agent. The next scheduled run fails, or worse, keeps running against a stale brand list until someone notices a post never went out. This is why secure token management for AI agents at scale matters from day one.

Why a Metricool credential is unusually blunt

Metricool's connect guide states plainly that MCP permissions grant full access, similar to logging in directly. There is no read-only scope to request and no per-brand grant. What the user can do in Metricool, the agent can do.

That makes surface reduction the only enforcement point you actually control. If your agent's job is weekly reporting, it should never be holding metricoolmcp_createscheduledpost. Not because the credential forbids it, but because you did not put the tool in context.

Where Scalekit fits

Scalekit's Metricool MCP connector runs the OAuth 2.1 flow, vaults the resulting credential per tenant with AES-256, resolves it server-side at call time, and refreshes it automatically. Credentials never touch the agent runtime and never enter LLM context. Revocation invalidates the connection on the next tool call, which fails closed for that user without affecting anyone else.

Building a Metricool agent with Scalekit

The examples below use Python and LangChain. The same pattern works with the Anthropic SDK, OpenAI, Google ADK, and Mastra, since the connected-account model is framework-independent. Full method signatures are in the Python SDK reference.

Set up the connection and authorize the user

Create a connection named metricoolmcp in the Scalekit dashboard first. The connection_name string in your code must match the connection name configured there exactly; a mismatch is the single most common integration error.

pip install scalekit-sdk-python langchain-openai
import os import scalekit.client scalekit_client = scalekit.client.ScalekitClient( client_id=os.getenv("SCALEKIT_CLIENT_ID"), client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"), env_url=os.getenv("SCALEKIT_ENV_URL"), ) actions = scalekit_client.actions # connection_name must match the connection configured in the Scalekit dashboard response = actions.get_or_create_connected_account( connection_name="metricoolmcp", identifier="user_123", ) if response.connected_account.status != "ACTIVE": link = actions.get_authorization_link( connection_name="metricoolmcp", identifier="user_123", user_verify_url="https://your-app.com/verify", ) print("Authorize Metricool:", link.link)

Retrieve the tools this user is authorized to call

Before the agent sees anything, decide what it is allowed to reach for. The agent is not loading a connector catalog. It is loading the tools this specific user's connected account authorizes, filtered further by what this agent role needs. A weekly reporting agent gets reads. A publishing agent gets writes. That distinction is enforced here, not in a system prompt.

tools = actions.langchain.get_tools( identifier="user_123", connection_names=["metricoolmcp"], tool_names=[ "metricoolmcp_getbrandsettings", "metricoolmcp_getanalyticsavailablemetrics", "metricoolmcp_getanalyticsdatabymetrics", "metricoolmcp_getbesttimetopostbynetwork", ], page_size=100, )

Run the agent loop

actions.langchain.get_tools() returns native StructuredTool objects, so no schema reshaping is needed. Bind them and run the loop. For more on how LangChain tool calling works end to end, see our deep dive.

from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, ToolMessage tool_map = {t.name: t for t in tools} llm = ChatOpenAI(model="gpt-4o").bind_tools(tools) messages = [HumanMessage( "For our main brand, pull last month's Instagram engagement " "and tell me the best window to post next week in Asia/Kolkata." )] while True: response = llm.invoke(messages) messages.append(response) if not response.tool_calls: print(response.content) break for tc in response.tool_calls: result = tool_map[tc["name"]].invoke(tc["args"]) messages.append(ToolMessage(content=str(result), tool_call_id=tc["id"]))

Schedule a post from a deterministic pipeline

When the flow is fixed-sequence, skip the reasoning loop and call execute_tool directly. Scalekit resolves the user's vaulted credential server-side before the call reaches Metricool.

import json result = actions.execute_tool( tool_name="metricoolmcp_createscheduledpost", identifier="user_123", tool_input={ "blogId": "1234567", "date": "2026-08-05T11:00:00+05:30", # info is a JSON-encoded string; full field list is on the connector docs page "info": json.dumps({ "providers": [{"network": "instagram"}], "text": "Q3 product roundup is live.", "publicationDate": { "dateTime": "2026-08-05T11:00:00", "timezone": "Asia/Kolkata", }, }), }, ) print(result.execution_id, result.data)

Calling the Metricool REST API through the same auth layer

If you need competitor data or bulk export, the REST API is still the right surface, and you do not have to build separate auth plumbing for it. Define a custom connector for https://app.metricool.com/api with the X-Mc-Auth header, then call it through Tool Proxy. See the Add your own connector docs for the connector definition steps.

# custom REST connector; Scalekit injects the vaulted X-Mc-Auth header response = actions.request( connection_name="metricool-rest", identifier="user_123", path="/admin/simpleProfiles", query_params={"userId": "1234567", "blogId": "1234567"}, ) brands = response.json()

Give each agent role its own Virtual MCP server

For multi-tool and multi-tenant agents, Virtual MCP Servers are the cleaner primitive. You declare which connections and which tools an agent role can see once, get a static endpoint back, and mint a short-lived session token per user before each run. One server definition serves every customer, and there is no MCP server to deploy or host.

from scalekit.actions.types import McpConfigConnectionToolMapping config = actions.mcp.create_config( name="social-reporting-agent", connection_tool_mappings=[ McpConfigConnectionToolMapping( connection_name="metricoolmcp", tools=[ "metricoolmcp_getbrandsettings", "metricoolmcp_getanalyticsavailablemetrics", "metricoolmcp_getanalyticsdatabymetrics", ], ) ], ) instance = actions.mcp.ensure_instance( config_name="social-reporting-agent", user_identifier="user_123", ) mcp_url = instance.instance.url

Confirm authorization before a background run

Scheduled agents run without a user present, so check connection state first and surface a fresh auth link when it has lapsed instead of failing silently mid-run.

auth_state = actions.mcp.get_instance_auth_state( instance_id=instance.instance.id, include_auth_links=True, ) for conn in auth_state.connections: if conn.connected_account_status != "ACTIVE": print(f"Re-authorize {conn.connection_name}: {conn.authentication_link}")

The observability you get for free

Downstream tool calling is where agent audit trails usually break. A shared token makes every scheduled post look identical in Metricool's own activity view, because it was the same account that made all of them. Scalekit logs every tool call with the user who triggered it, the tool invoked, and the result, retained for 90 days and exportable to your SIEM.

That is what turns "the agent posted something wrong" from a three-week investigation into a query. It is also what a security reviewer asks for when your agent holds a credential that grants full account access, which on Metricool is every credential. Understanding agent tool observability and why it matters is worth reading alongside this guide.

Which one to build against

If you are shipping a multi-tenant product where customers bring their own Metricool account, build on MCP. It is the only path with a delegated authorization flow, and it is the only path that works below the Advanced plan. Requiring an upgrade before a customer can try your agent is a cost you do not need to pay.

If you are running bulk exports, competitor analysis, or a single-tenant internal pipeline on your own Advanced account, use the REST API. It is shorter and more direct for work that already knows its endpoints.

Most production Metricool agents will use both. Either way, the credential is the same blunt, full-access artifact, and that is the part that needs production-grade infrastructure. The shift from single-tenant to multi-tenant tool calling is where auth requirements change most sharply, and where the MCP path earns its keep.

Talk to other Metricool agent builders

Browse the Scalekit Metricool MCP connector docs or the connector page for the full tool reference.

Building something on Metricool and hitting an auth or scoping question? Join the Scalekit Slack community or talk to an engineer if you need help right away.

No items found.
Agent
Auth Quickstart
On this page
Share this article
Agent
Auth Quickstart

Acquire enterprise customers with
zero upfront cost.

Every feature unlocked. No hidden fees.