Adobe Target MCP
README.md
# Adobe Target MCP
[](https://www.npmjs.com/package/@upendra_sengar/adobe-target-mcp)
[](https://www.npmjs.com/package/@upendra_sengar/adobe-target-mcp)
[](https://nodejs.org)
[](LICENSE)
A [Model Context Protocol](https://modelcontextprotocol.io) server for **Adobe Target**. Lets AI assistants manage A/B and Experience Targeting activities through the Adobe Target Admin API, with automatic Adobe IMS OAuth token handling (fetch, cache, refresh).
## Quickstart
Via Claude Code:
```console
claude mcp add adobe-target \
-e ADOBE_CLIENT_ID=your-client-id \
-e ADOBE_API_KEY=your-client-id \
-e ADOBE_CLIENT_SECRET=your-client-secret \
-e ADOBE_TENANT=your-tenant \
-- npx -y @upendra_sengar/adobe-target-mcp
```
## Requirements
- [Node.js](https://nodejs.org) >= 18
- An [Adobe Developer Console](https://developer.adobe.com/console) project with:
- The **Adobe Target API** enabled
- **OAuth Server-to-Server** credentials (client ID + client secret)
- Your Adobe Target **tenant** name (the subdomain in `mc.adobe.io/<tenant>/target/...`)
## Configuration
All configuration is passed as environment variables — no keys are ever stored in this package.
| Variable | Required | Description |
|----------|----------|-------------|
| `ADOBE_CLIENT_ID` | ✅ | Client ID from your Adobe Developer Console project |
| `ADOBE_API_KEY` | ✅ | API key sent as `X-Api-Key` (same value as the client ID) |
| `ADOBE_CLIENT_SECRET` | ✅ | Client secret from your Adobe Developer Console project |
| `ADOBE_TENANT` | ✅ | Adobe Target tenant subdomain |
| `PORT` | — | Port for SSE / Streamable HTTP modes (default `3001`) |
| `MCP_TOOL_LOGGING` | — | `true` to enable verbose per-tool logging |
| `MCP_LOG_FILE` | — | File path for logs in stdio mode |
For local development you can copy `.env.example` to `.env` instead.
## Installation
<details>
<summary><strong>Claude Desktop, Cursor, Windsurf, JetBrains</strong></summary>
These clients all use the same `mcpServers` format:
```json
{
"mcpServers": {
"adobe-target": {
"command": "npx",
"args": ["-y", "@upendra_sengar/adobe-target-mcp"],
"env": {
"ADOBE_CLIENT_ID": "your-client-id",
"ADOBE_API_KEY": "your-client-id",
"ADOBE_CLIENT_SECRET": "your-client-secret",
"ADOBE_TENANT": "your-tenant"
}
}
}
}
```
</details>
<details>
<summary><strong>VS Code</strong></summary>
Add to your workspace `.vscode/mcp.json`:
```json
{
"servers": {
"adobe-target": {
"command": "npx",
"args": ["-y", "@upendra_sengar/adobe-target-mcp"],
"env": {
"ADOBE_CLIENT_ID": "your-client-id",
"ADOBE_API_KEY": "your-client-id",
"ADOBE_CLIENT_SECRET": "your-client-secret",
"ADOBE_TENANT": "your-tenant"
}
}
}
}
```
</details>
## Transports
| Mode | Command | Use case |
|------|---------|----------|
| stdio (default) | `npx -y @upendra_sengar/adobe-target-mcp` | Local MCP clients (Claude Desktop, Cursor, …) |
| Streamable HTTP | `npx -y @upendra_sengar/adobe-target-mcp --streamable-http` | Remote / shared deployments (`POST /mcp`) |
| SSE | `npx -y @upendra_sengar/adobe-target-mcp --sse` | Legacy SSE clients (`GET /sse`, `POST /messages`) |
HTTP modes listen on `PORT` (default `3001`).
## Tools
| Tool | Description |
|------|-------------|
| `list_activities` | List activities with filters (state, name, type, priority) and pagination |
| `get_ab_activity_by_id` | Get full details of an A/B activity |
| `create_ab_activity` | Create a new A/B activity |
| `update_activity` | Update an existing activity |
| `update_activity_name` | Rename an activity |
| `update_activity_selector` | Update the DOM selector of an activity's experience location |
## Authentication flow
The server exchanges your client credentials for an Adobe IMS access token (`ims-na1.adobelogin.com`), caches it, and refreshes it automatically 5 minutes before expiry. Tokens are held in memory only — nothing is written to disk.
## Docker
```console
docker build -t adobe-target-mcp .
docker run -i --rm \
-e ADOBE_CLIENT_ID=your-client-id \
-e ADOBE_API_KEY=your-client-id \
-e ADOBE_CLIENT_SECRET=your-client-secret \
-e ADOBE_TENANT=your-tenant \
adobe-target-mcp
```
## License
[MIT](LICENSE)
TDQS
A3.7/5.0
Scored across 6 tools
Disambiguation5/5
Each tool targets a distinct action: listing, getting by ID, creating AB activities, updating the name, injecting HTML/JS code, or modifying selectors. No two tools overlap in purpose.
Naming Consistency5/5
All tools follow a consistent verb_noun pattern in snake_case (e.g., list_activities, update_activity_name, create_ab_activity). No mixing of conventions.
Tool Count5/5
With 6 tools, the set is well-scoped for an Adobe Target MCP server. It provides core operations without being excessive or sparse.
Completeness3/5
The set covers create, read, and update operations, but notably lacks a delete activity tool. This creates a gap in basic lifecycle management.
Maintenance
ActivityStale
ResponsivenessNo issues