Noizu Google MCP

Hex.pmHex DocsLicense: MIT

MCP server wrapping :noizu_google for agent/terminal access to Google marketing APIs (Search Console, GA4 Admin/Data, AdSense, Google Ads).

Built on :noizu_mcp. Speaks MCP over stdio when the application starts (mix run --no-halt).

Installation

def deps do
[
{:noizu_google_mcp, "~> 0.1.0"}
]
end

Runtime dependencies are :noizu_mcp, :noizu_google, and Jason.

Auth (environment)

VariablePurpose
GOOGLE_ACCESS_TOKENBearer token (preferred for short sessions)
GOOGLE_REFRESH_TOKENRefresh when access token absent
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETRequired for refresh

Aliases: GOOGLE_MARKETING_* for the same keys.

Google Ads tools also need a developer token (GOOGLE_ADS_DEVELOPER_TOKEN) and, for MCC logins, GOOGLE_ADS_LOGIN_CUSTOMER_ID. Obtain tokens with the OAuth Mix tasks in :noizu_google (mix google.oauth.authorize / mix google.oauth.exchange).

Run (stdio)

From this project, or any Mix project that depends on it:

mix deps.get
export GOOGLE_ACCESS_TOKEN=...
mix run --no-halt

The application starts {Noizu.Google.MCP, transport: :stdio} unless you set:

config :noizu_google_mcp, start_stdio: false

Use that when embedding the server in your own supervisor (tests already disable stdio so mix test does not attach to stdin).

Claude / agent config

{
"mcpServers": {
"noizu-google": {
"command": "mix",
"args": ["run", "--no-halt"],
"cwd": "/absolute/path/to/elixir-google-mcp",
"env": {
"GOOGLE_ACCESS_TOKEN": "..."
}
}
}
}

A checked-in template lives in .mcp.json.example.

Tools

ToolCategoryNotes
SearchConsole.SitesListSearchConsoleread
SearchConsole.SitesGetSearchConsoleread
SearchConsole.SitesAddSearchConsolewrite
SearchConsole.SitesDeleteSearchConsoledestructive (confirm)
SearchConsole.SearchAnalyticsQuerySearchConsoleread
SearchConsole.SitemapsListSearchConsoleread
SearchConsole.SitemapsSubmitSearchConsolewrite
SearchConsole.SitemapsDeleteSearchConsoledestructive (confirm)
Analytics.PropertiesListAnalyticsread
Analytics.PropertiesGetAnalyticsread
Analytics.DataStreamsListAnalyticsread
Analytics.RunReportAnalyticsread
AdSense.AccountsListAdSenseread
AdSense.AdUnitsListAdSenseread
AdSense.ReportsGenerateAdSenseread
Ads.ListCampaignsAdsread; needs developer token
Ads.ListConversionActionsAdsread; needs developer token
Ads.MutateAdsdry_run default; live needs confirm
Ads.CreateConversionActionAdsdry_run default; live needs confirm

Prefer read-only tools unless the user explicitly asks to mutate.

Embed

children = [
{Noizu.Google.MCP, transport: :stdio}
]

Or Streamable HTTP if you already run a :noizu_mcp HTTP transport — pass the same options Noizu.MCP.Server accepts.

Noizu.Google.MCP.Auth.client/0 builds a %Noizu.Google.Client{} from the environment / :noizu_google application config and refreshes when only a refresh token is set.

Development

mix deps.get
mix test
mix docs
mix hex.build # tarball only; does not publish

License

MIT