Excutia ads MCP
A local MCP server and plugin for Claude Code and Codex that reads Google Ads, Meta Ads and GA4, sizes and calls ad tests honestly, and changes accounts only through change plans you approve.
It runs on your machine with your own credentials and your own Google Cloud project. It makes no LLM or paid API calls: your assistant does the reasoning, and code computes every number.
Early release. The commands below work once
excutia0.2.0 is published to PyPI.
Install
Claude Code:
/plugin install excutia --marketplace excutia/ads-mcp
or, from a shell: claude plugin marketplace add excutia/ads-mcp then claude plugin install excutia@excutia.
Codex:
codex plugin marketplace add excutia/ads-mcp
codex plugin add excutia@excutia
Codex runs a plugin's hooks only after you trust them; until then Excutia works without its memory hooks.
Only the MCP server, without skills or experts:
claude mcp add excutia -- uvx excutia==0.2.0
codex mcp add excutia -- uvx excutia==0.2.0
The plugins and these commands launch the pinned package with uv's
uvx, so uv must be installed.
Try it without an account
With no workspace configured, Excutia serves a demo workspace of invented data. Ask your assistant "Diagnose my Google Ads account" or "How did my campaigns do last week?". Nothing reaches an ad platform in the demo, and change plans refuse to apply.
Connect your accounts
uvx excutia==0.2.0 setup
Setup walks through your own Google Cloud project (enable the Google Ads API, publish the OAuth consent screen to In production, create a Desktop OAuth client, sign in on a 127.0.0.1 redirect), a Meta system-user token and a GA4 property. Developer tokens are not needed: Google sunset them on 9 Sep 2026, and API access now follows your Cloud project. Secrets go to the OS keychain; Claude Code users can also enter them as plugin options, which Claude Code keeps in its secure storage.
Check credentials and access at any time; each failure prints the exact fix:
uvx excutia==0.2.0 doctor
What it runs and contacts
uvxdownloads theexcutiapackage and its dependencies from PyPI.- The server reads and, only after you approve a change plan, writes through the Google Ads API (v25), the Meta Graph API (v26.0) and the GA4 Data and Admin APIs, using your OAuth tokens.
setupanddoctorcall Google's OAuth endpoints and the read-only checks above.- Creative previews are fetched from the platforms' image CDNs (fbcdn.net, googlesyndication.com, googleusercontent.com).
- Review pages are served on 127.0.0.1 only.
- Data is stored in SQLite under
~/.excutia/<workspace>/. There is no telemetry.
Development
uv sync
uv run pytest
License
Apache-2.0. See LICENSE.
Metadata
Release files for excutia 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| excutia-0.2.0.tar.gz | 696.5 kB | With provenance | Details for excutia-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| excutia-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for excutia-0.2.0-py3-none-any.whl |
Total release size: 1.6 MB
Release files / excutia-0.2.0.tar.gz
| Download URL | excutia-0.2.0.tar.gz |
|---|---|
| Size | 696.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fbba068471e01f12ddc3a17b73c13b73765e41fb5218a10daa24514be9f42ed6
|
|
BLAKE2b-256 checksum How to use checksums |
284afd5194cddcfe008f9f6f8539e01916f31d88e14eb5fa37b9b3ba49d68e60
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.
Transparency logRelease files / excutia-0.2.0-py3-none-any.whl
| Download URL | excutia-0.2.0-py3-none-any.whl |
|---|---|
| Size | 910.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
42885b3e2471122554b7593d08dad5078ca2da06328db423ea0bbd356efd889c
|
|
BLAKE2b-256 checksum How to use checksums |
c23e4e9f7c9f3e22103c77b11114f317ab23687bf5d8475937e8cd7605497d8a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.
Transparency logSecurity for excutia 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for excutia-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.