Skip to content

Markifact MCP tool for ADK

Supported in ADKPythonTypeScript

The Markifact MCP Server connects your ADK agent to Markifact, an AI marketing automation platform with 300+ operations across 20+ platforms including Google Ads, Meta Ads, GA4, TikTok Ads, and Shopify. This integration gives your agent the ability to manage campaigns, analyze performance, and automate marketing workflows using natural language, with approval prompts on every write operation.

Use cases

  • Spend hygiene: surface wasted budget across Google Ads, Meta, TikTok and LinkedIn with concrete pause and reallocation recommendations.
  • Unified reporting: one prompt produces blended spend, ROAS, CAC and conversion deltas across every connected channel and GA4.
  • Briefs to live campaigns: go from a one-line brief to drafted Search, Performance Max, Meta Advantage+, TikTok or LinkedIn campaigns ready for human approval.
  • Lead handoff: sweep Meta and LinkedIn lead forms, enrich in HubSpot or Klaviyo, and trigger WhatsApp or Slack follow-ups.

Prerequisites

  • A Markifact account (free tier available)
  • At least one platform connected from the Markifact dashboard (Google Ads, Meta, GA4, Shopify, etc.)
  • See the Markifact docs for connection setup

Use with agent

from google.adk.agents import Agent
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams
from mcp import StdioServerParameters

root_agent = Agent(
    model="gemini-flash-latest",
    name="marketing_agent",
    instruction=(
        "You are a performance marketing agent that helps users manage "
        "ad campaigns, run analytics, sync e-commerce data, and "
        "execute marketing workflows across Google Ads, Meta Ads, GA4, "
        "TikTok Ads, LinkedIn Ads, Shopify, HubSpot, and more. "
        "Always confirm with the user before any write operation."
    ),
    tools=[
        McpToolset(
            connection_params=StdioConnectionParams(
                server_params=StdioServerParameters(
                    command="npx",
                    args=[
                        "-y",
                        "mcp-remote",
                        "https://api.markifact.com/mcp",
                    ],
                ),
                timeout=30,
            ),
        )
    ],
)

Note

When you run this agent for the first time, a browser window opens automatically to request access via OAuth. Approve the request in your browser to grant the agent access to your connected accounts.

from google.adk.agents import Agent
from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams

MARKIFACT_ACCESS_TOKEN = "YOUR_MARKIFACT_ACCESS_TOKEN"

root_agent = Agent(
    model="gemini-flash-latest",
    name="marketing_agent",
    instruction=(
        "You are a performance marketing agent that helps users manage "
        "ad campaigns, run analytics, sync e-commerce data, and "
        "execute marketing workflows across Google Ads, Meta Ads, GA4, "
        "TikTok Ads, LinkedIn Ads, Shopify, HubSpot, and more. "
        "Always confirm with the user before any write operation."
    ),
    tools=[
        McpToolset(
            connection_params=StreamableHTTPConnectionParams(
                url="https://api.markifact.com/mcp",
                headers={
                    "Authorization": f"Bearer {MARKIFACT_ACCESS_TOKEN}",
                },
            ),
        )
    ],
)

Note

If you already have a Markifact access token, you can connect directly using Streamable HTTP without the OAuth browser flow.

import { LlmAgent, MCPToolset } from "@google/adk";

const rootAgent = new LlmAgent({
    model: "gemini-flash-latest",
    name: "marketing_agent",
    instruction:
        "You are a performance marketing agent that helps users manage " +
        "ad campaigns, run analytics, sync e-commerce data, and " +
        "execute marketing workflows across Google Ads, Meta Ads, GA4, " +
        "TikTok Ads, LinkedIn Ads, Shopify, HubSpot, and more. " +
        "Always confirm with the user before any write operation.",
    tools: [
        new MCPToolset({
            type: "StdioConnectionParams",
            serverParams: {
                command: "npx",
                args: [
                    "-y",
                    "mcp-remote",
                    "https://api.markifact.com/mcp",
                ],
            },
        }),
    ],
});

export { rootAgent };

Note

When you run this agent for the first time, a browser window opens automatically to request access via OAuth. Approve the request in your browser to grant the agent access to your connected accounts.

import { LlmAgent, MCPToolset } from "@google/adk";

const MARKIFACT_ACCESS_TOKEN = "YOUR_MARKIFACT_ACCESS_TOKEN";

const rootAgent = new LlmAgent({
    model: "gemini-flash-latest",
    name: "marketing_agent",
    instruction:
        "You are a performance marketing agent that helps users manage " +
        "ad campaigns, run analytics, sync e-commerce data, and " +
        "execute marketing workflows across Google Ads, Meta Ads, GA4, " +
        "TikTok Ads, LinkedIn Ads, Shopify, HubSpot, and more. " +
        "Always confirm with the user before any write operation.",
    tools: [
        new MCPToolset({
            type: "StreamableHTTPConnectionParams",
            url: "https://api.markifact.com/mcp",
            transportOptions: {
                requestInit: {
                    headers: {
                        Authorization: `Bearer ${MARKIFACT_ACCESS_TOKEN}`,
                    },
                },
            },
        }),
    ],
});

export { rootAgent };

Note

If you already have a Markifact access token, you can connect directly using Streamable HTTP without the OAuth browser flow.

Available tools

Tool Description
find_operations Semantic search over the operation registry, scoped by platform and intent
get_operation_inputs Returns JSON Schema for a specific operation's inputs
run_operation Execute read operations
run_write_operation Execute write operations with approval protocol
list_connections List OAuth connections in the workspace
get_file_url Get URLs for reports and exports
read_file Read file contents
upload_media Upload media assets

Capabilities

Capability Description
Discovery Semantic search over 300+ operations with read/write classification
Approval-gated writes Four-step protocol around run_write_operation for any spend or destructive change
Campaign management Create, edit, pause and resume campaigns, ad sets and ads across all paid channels
Reporting & attribution Cross-platform spend, ROAS and conversion blends, plus GA4 path and channel analysis
Audiences Custom audiences, lookalikes, exclusions and behavioural targeting per platform
Creative Asset upload, variant rotation, fatigue detection and approval-gated publishing
Commerce & CRM Shopify, HubSpot and Klaviyo sync with paid media for closed-loop reporting
Messaging WhatsApp and Slack notifications for approvals, alerts and lead handoff
File I/O Reports, exports and uploads via get_file_url, read_file, upload_media

Supported platforms

Category Platforms
Paid media Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Microsoft Ads, Reddit Ads, Pinterest Ads, Snapchat Ads, Amazon Ads, DV360
Analytics GA4, BigQuery, Google Search Console, Google Merchant Center
E-commerce, CRM, messaging Shopify, HubSpot, Klaviyo, WhatsApp, Slack
Organic & social Facebook, Instagram, LinkedIn, Google Business Profile

Additional resources