{"_id":"@dsroden/meta-marketing-api-mcp","_rev":"5-e737b697efffd8cfd30a05d04406aaea","name":"@dsroden/meta-marketing-api-mcp","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.1":{"name":"@dsroden/meta-marketing-api-mcp","version":"1.0.1","keywords":["mcp","meta","facebook","marketing"],"author":{"name":"dsroden"},"license":"MIT","_id":"@dsroden/meta-marketing-api-mcp@1.0.1","maintainers":[{"name":"dsroden","email":"daniel.s.roden@gmail.com"}],"bin":{"meta-mcp":"build/server/index.js"},"dist":{"shasum":"5acd839c569806f7be0dafc71717360ae0c00170","tarball":"https://registry.npmjs.org/@dsroden/meta-marketing-api-mcp/-/meta-marketing-api-mcp-1.0.1.tgz","fileCount":99,"integrity":"sha512-WAl3fzjPtCWXST+ubK4/glcmHeDLqa/tcSeLn1TF3VxCI0Yk5xwlXxbAzuUbFGHDLBvBF3EDr8xtabkBoULipg==","signatures":[{"sig":"MEQCIEAfp5v2UDrfzW2coeKVSzzKCaIprGhz09hQcaPQ7jCPAiBfF54sSxjkao5pIx+j8I61xOL8bOVx83IcqNS4Ksj5BQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292624},"main":"build/index.js","type":"module","types":"build/index.d.ts","gitHead":"9462bf648f142408f26f7b5fb4f5b9a360535f91","scripts":{"dev":"NODE_OPTIONS=--loader ts-node/esm ts-node src/server/index.ts","lint":"eslint src/**/*.ts","test":"jest","build":"npm run clean && tsc && chmod +x build/server/index.js","clean":"rm -rf build","start":"node build/server/index.js","watch":"tsc -w","inspect":"DEBUG=mcp:* npx @modelcontextprotocol/inspector@0.7.0 node -r dotenv/config build/server/index.js","prepare":"npm run build","version":"git add -A src","preversion":"npm run lint","dev:inspect":"npm run build && nodemon --watch src -e ts --exec \"npm run inspect\"","postversion":"git push && git push --tags","test-client":"NODE_OPTIONS=\"--loader ts-node/esm\" ts-node --project tsconfig.test-client.json test-client.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"dsroden","email":"daniel.s.roden@gmail.com"},"_npmVersion":"10.8.2","description":"Personal MCP Server implementation for Meta Marketing API, designed for n8n workflows","directories":{},"_nodeVersion":"18.20.8","dependencies":{"@modelcontextprotocol/sdk":"^1.9.0"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.2","chai":"^5.2.0","jest":"^29.0.0","dotenv":"^16.4.7","eslint":"^8.0.0","nodemon":"^3.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.1","wait-on":"^7.2.0","cross-env":"^7.0.3","typescript":"^4.0.0","@types/chai":"^5.2.1","@types/jest":"^29.0.0","@types/node":"^18.19.84","concurrently":"^8.2.2","@types/express":"^5.0.1","@typescript-eslint/parser":"^5.0.0","@modelcontextprotocol/inspector":"0.7.0","@typescript-eslint/eslint-plugin":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/meta-marketing-api-mcp_1.0.1_1744921345736_0.5126669538480177","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@dsroden/meta-marketing-api-mcp","version":"1.0.2","keywords":["mcp","meta","facebook","marketing"],"author":{"name":"dsroden"},"license":"MIT","_id":"@dsroden/meta-marketing-api-mcp@1.0.2","maintainers":[{"name":"dsroden","email":"daniel.s.roden@gmail.com"}],"bin":{"meta-mcp":"build/server/index.js"},"dist":{"shasum":"8a30ffa667da6142b222d5eec570e0c5ca397b51","tarball":"https://registry.npmjs.org/@dsroden/meta-marketing-api-mcp/-/meta-marketing-api-mcp-1.0.2.tgz","fileCount":99,"integrity":"sha512-SYkKYhXnhuHJcYr1u8ndVa4y6q/OVXTyeieyGZ5X6qxRiNrTrC5SWUf3kuTKcUEEQ/ZhT22DMDIjxZJl3yFI+A==","signatures":[{"sig":"MEUCIQCR0QsZB8YI9cE8x/gDaLgvwtfCwaHqmWRJuJ0A6QLOogIgXMhWEMDQqkxTAeVJ8JlM7ThK/8orKEknccxXWHmUO2s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300103},"main":"build/index.js","type":"module","types":"build/index.d.ts","gitHead":"23bc0c0e05e15ac7d7b096ddcd071c4946261d3b","scripts":{"dev":"NODE_OPTIONS=--loader ts-node/esm ts-node src/server/index.ts","lint":"eslint src/**/*.ts","test":"jest","build":"npm run clean && tsc && chmod +x build/server/index.js","clean":"rm -rf build","start":"node build/server/index.js","watch":"tsc -w","inspect":"DEBUG=mcp:* npx @modelcontextprotocol/inspector@0.7.0 node -r dotenv/config build/server/index.js","prepare":"npm run build","version":"git add -A src","preversion":"npm run lint","dev:inspect":"npm run build && nodemon --watch src -e ts --exec \"npm run inspect\"","postversion":"git push && git push --tags","test-client":"NODE_OPTIONS=\"--loader ts-node/esm\" ts-node --project tsconfig.test-client.json test-client.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"dsroden","email":"daniel.s.roden@gmail.com"},"_npmVersion":"10.8.2","description":"MCP Server implementation for Meta Marketing API","directories":{},"_nodeVersion":"18.20.8","dependencies":{"@modelcontextprotocol/sdk":"^1.9.0"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.2","chai":"^5.2.0","jest":"^29.0.0","dotenv":"^16.4.7","eslint":"^8.0.0","nodemon":"^3.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.1","wait-on":"^7.2.0","cross-env":"^7.0.3","typescript":"^4.0.0","@types/chai":"^5.2.1","@types/jest":"^29.0.0","@types/node":"^18.19.84","concurrently":"^8.2.2","@types/express":"^5.0.1","@typescript-eslint/parser":"^5.0.0","@modelcontextprotocol/inspector":"0.7.0","@typescript-eslint/eslint-plugin":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/meta-marketing-api-mcp_1.0.2_1744922777039_0.5963960528305932","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@dsroden/meta-marketing-api-mcp","version":"1.0.3","keywords":["mcp","meta","facebook","marketing"],"author":{"name":"dsroden"},"license":"MIT","_id":"@dsroden/meta-marketing-api-mcp@1.0.3","maintainers":[{"name":"dsroden","email":"daniel.s.roden@gmail.com"}],"bin":{"meta-mcp":"build/server/index.js"},"dist":{"shasum":"608505d5b911f0dfd0f2a8916cdf39709913113e","tarball":"https://registry.npmjs.org/@dsroden/meta-marketing-api-mcp/-/meta-marketing-api-mcp-1.0.3.tgz","fileCount":99,"integrity":"sha512-73xfyL99a+PEHb7X/8yFnHTWECOlSIjl/EKDjshpp/Ke6Oob1K2BehcKy9bkfWYIN4OHE1wHUtzoDaUWXa2NQg==","signatures":[{"sig":"MEYCIQDVRUBSuWaImsi57jCN9PPY8Xc5rLEDvSzuCU/Fo9mu9wIhANJgOUHbHFzJuRJgy9dw7jpYtSFxEPDkwaBY8oIRmyFg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304167},"main":"build/index.js","type":"module","types":"build/index.d.ts","gitHead":"86f98fe1fc65d4036967d82d67a0bae59e831525","scripts":{"dev":"NODE_OPTIONS=--loader ts-node/esm ts-node src/server/index.ts","lint":"eslint src/**/*.ts","test":"jest","build":"npm run clean && tsc && chmod +x build/server/index.js","clean":"rm -rf build","start":"node build/server/index.js","watch":"tsc -w","inspect":"DEBUG=mcp:* npx @modelcontextprotocol/inspector@0.7.0 node -r dotenv/config build/server/index.js","prepare":"npm run build","version":"git add -A src","preversion":"npm run lint","dev:inspect":"npm run build && nodemon --watch src -e ts --exec \"npm run inspect\"","postversion":"git push && git push --tags","test-client":"NODE_OPTIONS=\"--loader ts-node/esm\" ts-node --project tsconfig.test-client.json test-client.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"dsroden","email":"daniel.s.roden@gmail.com"},"_npmVersion":"10.8.2","description":"MCP Server implementation for Meta Marketing API","directories":{},"_nodeVersion":"18.20.8","dependencies":{"@modelcontextprotocol/sdk":"^1.9.0"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.2","chai":"^5.2.0","jest":"^29.0.0","dotenv":"^16.4.7","eslint":"^8.0.0","nodemon":"^3.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.1","wait-on":"^7.2.0","cross-env":"^7.0.3","typescript":"^4.0.0","@types/chai":"^5.2.1","@types/jest":"^29.0.0","@types/node":"^18.19.84","concurrently":"^8.2.2","@types/express":"^5.0.1","@typescript-eslint/parser":"^5.0.0","@modelcontextprotocol/inspector":"0.7.0","@typescript-eslint/eslint-plugin":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/meta-marketing-api-mcp_1.0.3_1744923009191_0.18858561267379637","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@dsroden/meta-marketing-api-mcp","version":"1.0.4","keywords":["mcp","meta","facebook","marketing"],"author":{"name":"dsroden"},"license":"MIT","_id":"@dsroden/meta-marketing-api-mcp@1.0.4","maintainers":[{"name":"dsroden","email":"daniel.s.roden@gmail.com"}],"bin":{"meta-mcp":"build/server/index.js"},"dist":{"shasum":"9d62908e81a236705652188655ed7d1d31013c5d","tarball":"https://registry.npmjs.org/@dsroden/meta-marketing-api-mcp/-/meta-marketing-api-mcp-1.0.4.tgz","fileCount":99,"integrity":"sha512-o66B9+KC5NzV38sLi/BNWkKjIMLlU5E7sRpTsN6F/dyd8udDwIvleGSgc75xJUQmX7/E58esnQowHAllHa0GGQ==","signatures":[{"sig":"MEQCIAY9fypAzv+YBjzCFg/nvIvPagnj23+3rvcPmSjrCWGAAiA0cElCqxT1lpZYC4f6X8V7ANwc5ofr4ZdbfO+OUsC/ww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295875},"main":"build/index.js","type":"module","types":"build/index.d.ts","gitHead":"5dddf4459c134051ee9704c256c91895723be984","scripts":{"dev":"NODE_OPTIONS=--loader ts-node/esm ts-node src/server/index.ts","lint":"eslint src/**/*.ts","test":"jest","build":"npm run clean && tsc && chmod +x build/server/index.js","clean":"rm -rf build","start":"node build/server/index.js","watch":"tsc -w","inspect":"DEBUG=mcp:* npx @modelcontextprotocol/inspector@0.7.0 node -r dotenv/config build/server/index.js","prepare":"npm run build","version":"git add -A src","preversion":"npm run lint","dev:inspect":"npm run build && nodemon --watch src -e ts --exec \"npm run inspect\"","postversion":"git push && git push --tags","test-client":"NODE_OPTIONS=\"--loader ts-node/esm\" ts-node --project tsconfig.test-client.json test-client.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"dsroden","email":"daniel.s.roden@gmail.com"},"_npmVersion":"10.8.2","description":"MCP Server implementation for Meta Marketing API","directories":{},"_nodeVersion":"18.20.8","dependencies":{"@modelcontextprotocol/sdk":"^1.9.0"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.2","chai":"^5.2.0","jest":"^29.0.0","dotenv":"^16.4.7","eslint":"^8.0.0","nodemon":"^3.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.1","wait-on":"^7.2.0","cross-env":"^7.0.3","typescript":"^4.0.0","@types/chai":"^5.2.1","@types/jest":"^29.0.0","@types/node":"^18.19.84","concurrently":"^8.2.2","@types/express":"^5.0.1","@typescript-eslint/parser":"^5.0.0","@modelcontextprotocol/inspector":"0.7.0","@typescript-eslint/eslint-plugin":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/meta-marketing-api-mcp_1.0.4_1744924225937_0.6075776852850154","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@dsroden/meta-marketing-api-mcp","version":"1.0.5","type":"module","description":"MCP Server implementation for Meta Marketing API","main":"build/index.js","types":"build/index.d.ts","bin":{"meta-mcp":"build/server/index.js"},"scripts":{"clean":"rm -rf build","build":"npm run clean && tsc && chmod +x build/server/index.js","test":"jest","lint":"eslint src/**/*.ts","prepare":"npm run build","prepublishOnly":"npm run build","preversion":"npm run lint","version":"git add -A src","postversion":"git push && git push --tags","start":"node build/server/index.js","test-client":"NODE_OPTIONS=\"--loader ts-node/esm\" ts-node --project tsconfig.test-client.json test-client.ts","dev":"NODE_OPTIONS=--loader ts-node/esm ts-node src/server/index.ts","inspect":"DEBUG=mcp:* npx @modelcontextprotocol/inspector@0.7.0 node -r dotenv/config build/server/index.js","watch":"tsc -w","dev:inspect":"npm run build && nodemon --watch src -e ts --exec \"npm run inspect\""},"keywords":["mcp","meta","facebook","marketing"],"author":{"name":"dsroden"},"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.9.0"},"devDependencies":{"@modelcontextprotocol/inspector":"0.7.0","@types/chai":"^5.2.1","@types/express":"^5.0.1","@types/jest":"^29.0.0","@types/node":"^18.19.84","@typescript-eslint/eslint-plugin":"^5.0.0","@typescript-eslint/parser":"^5.0.0","chai":"^5.2.0","concurrently":"^8.2.2","cross-env":"^7.0.3","dotenv":"^16.4.7","eslint":"^8.0.0","jest":"^29.0.0","nodemon":"^3.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.1","typescript":"^4.0.0","wait-on":"^7.2.0","zod":"^3.24.2"},"_id":"@dsroden/meta-marketing-api-mcp@1.0.5","gitHead":"4b2edfff660a40049ea42f2f4671f349c2ca682b","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-XSy8ZeAkh5LXM1RFb+9M9J/+ZROspaDHMf5N4yvUMeXW42tNJ6chHiMMToIjJVqAMuX7uvtIzjTv2hP0OQ3f2Q==","shasum":"7e1d317c8037a26b6e1ec2c1ae8d014156469074","tarball":"https://registry.npmjs.org/@dsroden/meta-marketing-api-mcp/-/meta-marketing-api-mcp-1.0.5.tgz","fileCount":102,"unpackedSize":298149,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDQKB0JwLb77vAXb4Q/NnYJdp0Xviy2Oa3nEQPqMh3pUQIgU+oNHkHS2aAEwO0dOWZzCE4g1Bf1yWzMwNOUW2vGlLo="}]},"_npmUser":{"name":"dsroden","email":"daniel.s.roden@gmail.com"},"directories":{},"maintainers":[{"name":"dsroden","email":"daniel.s.roden@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/meta-marketing-api-mcp_1.0.5_1746285199517_0.33935443220590766"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-17T20:22:25.644Z","modified":"2025-05-03T15:13:19.986Z","1.0.1":"2025-04-17T20:22:25.939Z","1.0.2":"2025-04-17T20:46:17.241Z","1.0.3":"2025-04-17T20:50:09.404Z","1.0.4":"2025-04-17T21:10:26.146Z","1.0.5":"2025-05-03T15:13:19.778Z"},"author":{"name":"dsroden"},"license":"MIT","keywords":["mcp","meta","facebook","marketing"],"description":"MCP Server implementation for Meta Marketing API","maintainers":[{"name":"dsroden","email":"daniel.s.roden@gmail.com"}],"readme":"# Meta MCP Server\n\nA personal MCP Server implementation for the Meta Marketing API, designed for both stdio (Claude, etc.) and SSE (n8n) workflows. This is not an official Meta product.\n\n## Installation\n\n```bash\n# Global installation (recommended for n8n usage)\nnpm install -g @dro-ff/meta-mcp\n\n# Or run directly with npx (recommended for stdio usage)\nnpx @dro-ff/meta-mcp\n```\n\n## Configuration\n\n### Meta API Credentials\n\nSet the following environment variables for Meta API authentication:\n\n```bash\nMETA_APP_ID=your_app_id\nMETA_APP_SECRET=your_app_secret\nMETA_ACCESS_TOKEN=your_access_token\nMETA_BUSINESS_ID=your_business_id\nMETA_SYSTEM_USER_ID=your_system_user_id\nMETA_PAGE_ID=your_page_id\nMETA_ACCOUNT_ID=your_account_id\nMETA_API_VERSION=v22.0  # Optional, defaults to v22.0\n```\n\n### Server Configuration (for SSE transport)\n\nOptional environment variables for SSE server configuration:\n\n```bash\nMCP_TRANSPORT=sse  # 'sse' or 'stdio' (defaults to 'sse' if not specified)\nMCP_HOST=localhost  # Server host (defaults to localhost)\nMCP_PORT=3000      # Server port (defaults to 3000)\nNODE_ENV=development  # or production\n```\n\n## Usage Methods\n\nThis MCP server supports two transport methods:\n\n### 1. stdio Transport (for Claude, etc.)\n\nAdd the following to your application's configuration (e.g., `claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"meta-marketing\": {\n      \"command\": \"npx\",\n      \"args\": [\"@dro-ff/meta-mcp\"],\n      \"env\": {\n        \"META_APP_ID\": \"your_app_id\",\n        \"META_APP_SECRET\": \"your_app_secret\",\n        \"META_ACCESS_TOKEN\": \"your_access_token\",\n        \"META_BUSINESS_ID\": \"your_business_id\",\n        \"META_SYSTEM_USER_ID\": \"your_system_user_id\",\n        \"META_PAGE_ID\": \"your_page_id\",\n        \"META_ACCOUNT_ID\": \"your_account_id\",\n        \"META_API_VERSION\": \"v22.0\"\n      }\n    }\n  }\n}\n```\n\n### 2. SSE Transport (for n8n)\n\n1. Start the MCP Server:\n\n```bash\nmeta-mcp\n# Server will start at http://localhost:3000 by default\n```\n\n2. In n8n:\n   - Add an MCP Client node\n   - Configure the connection:\n     - Connection Type: SSE\n     - Base URL: `http://localhost:3000` (or your server address)\n     - Initial Connection Path: `/connect`\n   - Add Meta API credentials in n8n's interface\n   - Use the available capabilities in your workflows\n\nThe server automatically handles both transport methods based on how it's initiated. No additional configuration is needed to switch between them.\n\n## Available Capabilities\n\n### Resources\n\n- Campaigns: List and get campaigns\n- Ad Sets: List and get ad sets\n- Ads: List and get ads\n- Creatives: List and get creatives\n\n### Tools\n\n- Campaign Tools:\n  - Create campaigns\n  - Update campaigns\n  - Get campaign insights\n- Ad Set Tools:\n  - Create ad sets\n  - Get ad set insights\n- Ad Tools:\n  - Create ads (requires app in Live status)\n  - Get ad insights\n- Creative Tools:\n  - Get creative insights\n\n### Prompts\n\n- Campaign Insights Analysis: Analyze campaign performance with optional funnel analysis\n\n## Development\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/DSRoden/meta-mcp-server.git\ncd meta-mcp-server\n```\n\n2. Install dependencies:\n\n```bash\nnpm install\n```\n\n3. Build the project:\n\n```bash\nnpm run build\n```\n\n4. Start the server:\n\n```bash\n# Development mode with hot reload\nnpm run dev\n\n# Production mode\nnpm start\n\n# Run with specific transport\nMCP_TRANSPORT=sse npm start\n```\n\n5. Run the MCP Inspector:\n\n```bash\n# One-time inspection\nnpm run inspect\n\n# Development mode with inspector\nnpm run dev:inspect\n```\n\n## Server Endpoints (SSE Mode)\n\nWhen running in SSE mode, the following endpoints are available:\n\n- `GET /health` - Health check endpoint\n- `GET /connect` - Initial SSE connection\n- `GET /mcp?sessionId={sessionId}` - SSE stream endpoint\n- `POST /mcp?sessionId={sessionId}` - JSON-RPC endpoint for commands\n\n## Environment Variables Summary\n\n| Variable            | Required | Default     | Description                |\n| ------------------- | -------- | ----------- | -------------------------- |\n| META_APP_ID         | Yes      | -           | Meta App ID                |\n| META_APP_SECRET     | Yes      | -           | Meta App Secret            |\n| META_ACCESS_TOKEN   | Yes      | -           | Meta Access Token          |\n| META_BUSINESS_ID    | Yes      | -           | Meta Business ID           |\n| META_SYSTEM_USER_ID | Yes      | -           | Meta System User ID        |\n| META_PAGE_ID        | Yes      | -           | Meta Page ID               |\n| META_ACCOUNT_ID     | Yes      | -           | Meta Ad Account ID         |\n| META_API_VERSION    | No       | v22.0       | Meta API Version           |\n| MCP_TRANSPORT       | No       | sse         | Transport type (sse/stdio) |\n| MCP_HOST            | No       | localhost   | Server host (SSE mode)     |\n| MCP_PORT            | No       | 3000        | Server port (SSE mode)     |\n| NODE_ENV            | No       | development | Environment mode           |\n\n## License\n\nMIT\n\n## Backend Integration\n\n### Express.js Server Integration\n\nYou can integrate the MCP server into your existing Express.js backend:\n\n```typescript\nimport express from \"express\";\nimport { Server } from \"@dro-ff/meta-mcp\";\nimport { SSEServerTransport } from \"@modelcontextprotocol/sdk/server/sse.js\";\nimport dotenv from \"dotenv\";\n\n// ... rest of server code as before ...\n```\n\n### Node.js Client Integration\n\nTo interact with the MCP server from another Node.js application, use the MCP client:\n\n```typescript\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\n\nasync function main() {\n  // Initialize the client\n  const client = new Client(\n    {\n      name: \"meta-marketing-client\",\n      version: \"1.0.0\",\n    },\n    {\n      capabilities: {},\n    }\n  );\n\n  try {\n    // Connect to MCP server using SSE transport\n    const transport = new SSEClientTransport({\n      baseUrl: \"http://localhost:3000\", // Your MCP server URL\n      connectPath: \"/connect\",\n    });\n\n    await client.connect(transport);\n    console.log(\"Connected to MCP server\");\n\n    // Example: Create a campaign\n    const result = await client.request({\n      method: \"tools/call\",\n      params: {\n        name: \"mcp_meta_mcp_meta_campaign_create\",\n        arguments: {\n          name: \"Test Campaign\",\n          objective: \"OUTCOME_AWARENESS\",\n          status: \"PAUSED\",\n          special_ad_categories: [],\n        },\n      },\n    });\n\n    console.log(\"Campaign created:\", result);\n\n    // Example: Get campaign insights\n    const insights = await client.request({\n      method: \"tools/call\",\n      params: {\n        name: \"mcp_meta_mcp_meta_campaign_insights\",\n        arguments: {\n          campaign_id: result.id,\n          date_preset: \"last_7d\",\n        },\n      },\n    });\n\n    console.log(\"Campaign insights:\", insights);\n  } catch (error) {\n    console.error(\"Error:\", error);\n  }\n}\n\nmain();\n```\n\n### Using stdio Transport in Node.js\n\nFor stdio transport (useful for CLI tools or desktop apps):\n\n```typescript\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\n\nasync function main() {\n  const client = new Client(\n    {\n      name: \"meta-marketing-client\",\n      version: \"1.0.0\",\n    },\n    {\n      capabilities: {},\n    }\n  );\n\n  try {\n    // Connect using stdio transport\n    const transport = new StdioClientTransport({\n      command: \"npx\",\n      args: [\"@dro-ff/meta-mcp\"],\n      env: {\n        META_APP_ID: process.env.META_APP_ID,\n        META_APP_SECRET: process.env.META_APP_SECRET,\n        META_ACCESS_TOKEN: process.env.META_ACCESS_TOKEN,\n        META_BUSINESS_ID: process.env.META_BUSINESS_ID,\n        META_SYSTEM_USER_ID: process.env.META_SYSTEM_USER_ID,\n        META_PAGE_ID: process.env.META_PAGE_ID,\n        META_ACCOUNT_ID: process.env.META_ACCOUNT_ID,\n        META_API_VERSION: process.env.META_API_VERSION,\n      },\n    });\n\n    await client.connect(transport);\n    console.log(\"Connected to MCP server via stdio\");\n\n    // Make requests as in the SSE example\n  } catch (error) {\n    console.error(\"Error:\", error);\n  }\n}\n\nmain();\n```\n\n### Example: Express.js Application with Both Server and Client\n\nHere's a complete example combining both server and client in an Express application:\n\n```typescript\nimport express from \"express\";\nimport { Server } from \"@dro-ff/meta-mcp\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEServerTransport } from \"@modelcontextprotocol/sdk/server/sse.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport dotenv from \"dotenv\";\n\ndotenv.config();\nconst app = express();\nconst port = process.env.PORT || 3000;\n\n// Initialize Express middleware\napp.use(express.json());\n\n// Initialize MCP Server\nconst mcpServer = new Server(\n  {\n    name: \"meta-marketing-server\",\n    version: \"1.0.0\",\n  },\n  {\n    capabilities: {\n      tools: { list: true, call: true },\n      resources: { list: true, read: true, templates: true },\n      prompts: { list: true, get: true },\n    },\n  }\n);\n\n// Initialize MCP Client\nconst mcpClient = new Client(\n  {\n    name: \"meta-marketing-client\",\n    version: \"1.0.0\",\n  },\n  {\n    capabilities: {},\n  }\n);\n\n// Example API endpoint using MCP client\napp.post(\"/api/campaigns\", async (req, res) => {\n  try {\n    const result = await mcpClient.request({\n      method: \"tools/call\",\n      params: {\n        name: \"mcp_meta_mcp_meta_campaign_create\",\n        arguments: req.body,\n      },\n    });\n    res.json(result);\n  } catch (error) {\n    res.status(500).json({ error: error.message });\n  }\n});\n\n// Mount MCP server endpoints\napp.get(\"/mcp/connect\", async (req, res) => {\n  // ... SSE connection handling as before ...\n});\n\napp.post(\"/mcp\", async (req, res) => {\n  // ... MCP message handling as before ...\n});\n\n// Start the server\napp.listen(port, async () => {\n  console.log(`Server running at http://localhost:${port}`);\n\n  // Connect MCP client to the server\n  try {\n    const transport = new SSEClientTransport({\n      baseUrl: `http://localhost:${port}`,\n      connectPath: \"/connect\",\n    });\n    await mcpClient.connect(transport);\n    console.log(\"MCP client connected successfully\");\n  } catch (error) {\n    console.error(\"Failed to connect MCP client:\", error);\n  }\n});\n```\n\n### Deployment Examples\n\n// ... rest of existing deployment content ...\n","readmeFilename":"README.md"}