$npx -y skills add indranilbanerjee/contentforge --skill cf-add-integrationAdd a custom MCP connector — connect any API or service to ContentForge via .mcp.json configuration.
| 1 | # /contentforge:cf-add-integration |
| 2 | |
| 3 | ## Purpose |
| 4 | |
| 5 | Help users connect any external API, tool, or service to ContentForge as an MCP connector. Walk through the entire process conversationally — from finding the right MCP package to testing the connection — without requiring technical MCP knowledge. |
| 6 | |
| 7 | ## Input Required |
| 8 | |
| 9 | The user provides (or will be asked): |
| 10 | |
| 11 | - **What they want to connect**: The service name and what they want it to do — e.g., "Google Analytics to track content performance", "Ahrefs for keyword research", "our internal CMS to publish directly" |
| 12 | - **Credentials**: API keys, tokens, or OAuth setup they have (or will need to obtain). The system will guide them on exactly what's needed. **Never ask users to paste secrets into the conversation.** |
| 13 | |
| 14 | ## Process |
| 15 | |
| 16 | ### Step 1: Understand what the user wants |
| 17 | |
| 18 | Ask the user what service they want to connect and what they want it to do within ContentForge. Map their intent to content workflow stages: |
| 19 | |
| 20 | | Workflow Stage | Example Integrations | |
| 21 | |---------------|---------------------| |
| 22 | | Research (Phase 1) | Ahrefs, Similarweb, Google Search Console | |
| 23 | | Publishing (Phase 8) | Webflow, WordPress, HubSpot CMS | |
| 24 | | Collaboration | Notion, Slack, Google Drive | |
| 25 | | Tracking | Google Sheets, Google Analytics | |
| 26 | | Translation | DeepL, Sarvam AI | |
| 27 | | Social distribution | Twitter/X, LinkedIn, Instagram | |
| 28 | |
| 29 | ### Step 2: Check if a connector already exists |
| 30 | |
| 31 | Run `python scripts/connector-status.py --action check <name>` to see if the connector is already in the registry. |
| 32 | |
| 33 | - **If it exists and is connected**: Tell the user it's already active and which skills use it. |
| 34 | - **If it exists but not connected**: Run `python scripts/connector-status.py --action setup-guide <name>` and walk through the guided setup. |
| 35 | - **If it doesn't exist**: Proceed to Step 3. |
| 36 | |
| 37 | ### Step 3: Find an MCP package |
| 38 | |
| 39 | Search for an existing MCP server package that provides the desired integration. |
| 40 | |
| 41 | Note: ContentForge ships with an empty `.mcp.json` (`"mcpServers": {}`) by design — every connector is opt-in and user-added. Nothing is pre-wired. |
| 42 | |
| 43 | 1. **Check verified HTTP endpoints first** — hosted HTTP MCP servers are the easiest (work in both Cowork and Claude Code, no API keys for OAuth-based ones). The plugin's catalog of verified HTTP endpoints lives in **`.mcp.json.connectors-reference`** — use the URL from that file. If the service isn't listed there, check the vendor's official documentation for an MCP endpoint before guessing. Do not use endpoint URLs from memory: unverified URLs waste the user's setup time. |
| 44 | |
| 45 | 2. **Search npm for MCP packages** — Search for `mcp-<service-name>` or `<service-name>-mcp-server`. **Verify the package actually exists and is maintained before recommending it:** run `npm view <package-name> version` and check last-publish date and download counts. If nothing maintained exists, say so honestly. |
| 46 | |
| 47 | 3. **If no endpoint or package exists** — Guide the user through custom MCP server development (see Step 5). |
| 48 | |
| 49 | ### Step 4: Configure the connector |
| 50 | |
| 51 | Generate the exact configuration entry for `.mcp.json`: |
| 52 | |
| 53 | **For HTTP connectors:** |
| 54 | ```json |
| 55 | { |
| 56 | "mcpServers": { |
| 57 | "service-name": { |
| 58 | "type": "http", |
| 59 | "url": "https://mcp.service.com/mcp", |
| 60 | "description": "Service Name — what it provides for ContentForge" |
| 61 | } |
| 62 | } |
| 63 | } |
| 64 | ``` |
| 65 | |
| 66 | **For npx connectors:** |
| 67 | ```json |
| 68 | { |
| 69 | "mcpServers": { |
| 70 | "service-name": { |
| 71 | "command": "npx", |
| 72 | "args": ["-y", "mcp-package-name"], |
| 73 | "env": { |
| 74 | "SERVICE_API_KEY": "${SERVICE_API_KEY}" |
| 75 | }, |
| 76 | "description": "Service Name — what it provides for ContentForge" |
| 77 | } |
| 78 | } |
| 79 | } |
| 80 | ``` |
| 81 | |
| 82 | **Walk the user through:** |
| 83 | 1. Open `.mcp.json` in the plugin root directory |
| 84 | 2. Add the new entry inside the `mcpServers` object |
| 85 | 3. Set up environment variables (explain where: `.env` file or system environment) |
| 86 | 4. Save and restart the session |
| 87 | |
| 88 | ### Step 5: Custom MCP server (if needed) |
| 89 | |
| 90 | If no existing package covers the user's needs, provide a development template: |
| 91 | |
| 92 | ``` |
| 93 | Project Structure: |
| 94 | my-mcp-server/ |
| 95 | ├── index.js # Main server with tool definitions |
| 96 | ├── package.json # Dependencies |
| 97 | └── .env.example # Required credentials |
| 98 | |
| 99 | Key Components: |
| 100 | - Tool definitions (what Claude can call) |
| 101 | - Authentication handler (API key, OAuth, etc.) |
| 102 | - Request/response formatting |
| 103 | - Error handling with meaningful messages |
| 104 | |
| 105 | .mcp.json Entry: |
| 106 | "my-service": { |
| 107 | "command": "node", |
| 108 | "args": ["path/to/my-mcp-server/index.js"], |
| 109 | "env": { "MY_API_KEY": "${MY_API_KEY}" } |
| 110 | } |
| 111 | ``` |
| 112 | |
| 113 | Provide a starter skeleton specific to the user's API, with: |
| 114 | - Endpoint URLs pre-filled |
| 115 | - Authentication pattern matching their API |
| 116 | - Tool definitions for common operations |
| 117 | |
| 118 | ### Step 6: Test and verify |
| 119 | |
| 120 | After configuration: |
| 121 | |
| 122 | 1. Ask the user to restart their Claude ses |