pulsemcp-cms-admin-mcp-server
v0.9.13
Published
Local implementation of PulseMCP CMS Admin MCP server
Readme
PulseMCP CMS Admin MCP Server
Note: This package is part of the MCP Servers monorepo. For the latest updates and full source code, visit the PulseMCP CMS Admin MCP Server directory.
Haven't heard about MCP yet? The easiest way to keep up-to-date is to read our weekly newsletter at PulseMCP.
This is an MCP (Model Context Protocol) Server for managing PulseMCP's content management system. It provides tools for newsletter management and content operations through direct integration with the PulseMCP Admin API.
Note: This is an internal tool for the PulseMCP team. The source code is public for reference purposes, but the server requires API keys that are not publicly available.
Table of Contents
Highlights
Newsletter Management: Create, update, and retrieve newsletter posts with full content control.
Image Uploads: Upload images to cloud storage and attach them to newsletter posts.
Content Search: Find newsletter posts with powerful search and pagination capabilities.
MCP Implementation Search: Search for MCP servers and clients in the PulseMCP registry.
Tool Groups: Enable/disable tool groups via TOOL_GROUPS environment variable. Each group has a base variant (full access) and a _readonly variant (read-only access).
Draft Control: Manage draft posts before publishing to the newsletter.
Capabilities
This server is built and tested on macOS with Claude Desktop. It should work with other MCP clients as well.
| Tool Name | Tool Group | Read/Write | Description |
| -------------------------------------- | ------------------ | ---------- | ---------------------------------------------------------------------------------------------------------- |
| get_newsletter_posts | newsletter | read | List newsletter posts with search, sorting, and pagination options. |
| get_newsletter_post | newsletter | read | Retrieve a specific newsletter post by its unique slug. |
| draft_newsletter_post | newsletter | write | Create a new draft newsletter post with title, body, and metadata. |
| update_newsletter_post | newsletter | write | Update an existing newsletter post's content and metadata (except status). |
| upload_image | newsletter | write | Upload an image and attach it to a specific newsletter post. |
| get_authors | newsletter | read | Get a list of authors with optional search and pagination. |
| search_mcp_implementations | server_directory | read | Search for MCP servers and clients in the PulseMCP registry. |
| get_draft_mcp_implementations | server_directory | read | Retrieve paginated list of draft MCP implementations needing review. |
| find_providers | server_directory | read | Search for providers by ID, name, URL, or slug. |
| save_mcp_implementation | server_directory | write | Update an MCP implementation (replicates Admin panel "Save Changes" button). |
| send_impl_posted_notif | server_directory | write | Send email notification when MCP implementation goes live. |
| get_official_mirror_queue_items | official_queue | read | List and filter official mirror queue entries with pagination and search. |
| get_official_mirror_queue_item | official_queue | read | Get detailed information about a single official mirror queue entry. |
| approve_official_mirror_queue_item | official_queue | write | Approve a queue entry and link it to an existing MCP server (async). |
| approve_mirror_no_modify | official_queue | write | Approve without updating the linked server. |
| reject_official_mirror_queue_item | official_queue | write | Reject a queue entry (async operation). |
| add_official_mirror_to_regular_queue | official_queue | write | Convert a queue entry to a draft MCP implementation (async). |
| unlink_official_mirror_queue_item | official_queue | write | Unlink a queue entry from its linked MCP server. |
| get_unofficial_mirrors | unofficial_mirrors | read | List unofficial mirrors with search, pagination, and MCP server filtering. |
| get_unofficial_mirror | unofficial_mirrors | read | Get detailed unofficial mirror info by ID or name. |
| create_unofficial_mirror | unofficial_mirrors | write | Create a new unofficial mirror entry with JSON data. |
| update_unofficial_mirror | unofficial_mirrors | write | Update an existing unofficial mirror by ID. |
| delete_unofficial_mirror | unofficial_mirrors | write | Delete an unofficial mirror by ID (irreversible). |
| get_official_mirrors | official_mirrors | read | List official mirrors with search, status, and processing filters. |
| get_official_mirror | official_mirrors | read | Get detailed official mirror info by ID or name. |
| get_tenants | tenants | read | List tenants with search and admin status filtering. |
| get_tenant | tenants | read | Get detailed tenant info by ID or slug. |
| get_mcp_jsons | mcp_jsons | read | List MCP JSON configs with mirror and server filtering. |
| get_mcp_json | mcp_jsons | read | Get a single MCP JSON configuration by ID. |
| create_mcp_json | mcp_jsons | write | Create a new MCP JSON configuration for an unofficial mirror. |
| update_mcp_json | mcp_jsons | write | Update an existing MCP JSON configuration by ID. |
| delete_mcp_json | mcp_jsons | write | Delete an MCP JSON configuration by ID (irreversible). |
| list_mcp_servers | mcp_servers | read | List/search MCP servers with filtering by status, classification, pagination. |
| get_mcp_server | mcp_servers | read | Get detailed MCP server info by slug (unified view of all admin UI fields). |
| update_mcp_server | mcp_servers | write | Update an MCP server's fields (all admin UI fields supported). |
| get_redirects | redirects | read | List URL redirects with search, status filtering, and pagination. |
| get_redirect | redirects | read | Get detailed redirect info by ID. |
| create_redirect | redirects | write | Create a new URL redirect entry. |
| update_redirect | redirects | write | Update an existing URL redirect by ID. |
| delete_redirect | redirects | write | Delete a URL redirect by ID (irreversible). |
| list_good_jobs | good_jobs | read | List and filter background jobs by queue, status, job class, and date range. |
| get_good_job | good_jobs | read | Get detailed information about a specific background job. |
| list_good_job_cron_schedules | good_jobs | read | List all configured cron schedules. |
| list_good_job_processes | good_jobs | read | List active worker processes. |
| get_good_job_queue_statistics | good_jobs | read | Get aggregate job statistics by status. |
| retry_good_job | good_jobs | write | Retry a failed or discarded background job. |
| discard_good_job | good_jobs | write | Discard a background job to prevent retries. |
| reschedule_good_job | good_jobs | write | Reschedule a background job to a new time. |
| force_trigger_good_job_cron | good_jobs | write | Force trigger a cron schedule immediately. |
| cleanup_good_jobs | good_jobs | write | Clean up old background jobs by status and age. |
| run_exam_for_mirror | proctor | write | Run proctor exams against unofficial mirrors via Fly Machines. Returns truncated summary with result_id. |
| get_exam_result | proctor | read | Retrieve full untruncated exam results by result_id, with optional section/mirror filtering. |
| save_results_for_mirror | proctor | write | Save proctor exam results via result_id from run_exam_for_mirror. |
| list_proctor_runs | proctor | read | List proctor runs with filtering by name, recommended status, and tenant IDs. |
| get_proctor_metadata | proctor | read | Get available proctor runtimes and exam types. |
| list_discovered_urls | discovered_urls | read | List discovered URLs with status filtering and pagination. |
| mark_discovered_url_processed | discovered_urls | write | Mark a discovered URL as processed with a result status. |
| get_discovered_url_stats | discovered_urls | read | Get summary statistics for discovered URLs pipeline. |
| get_moz_metrics | moz | read | Fetch live URL metrics from the MOZ API (page authority, domain authority, spam score, link counts). |
| get_moz_backlinks | moz | read | Fetch live backlink data from the MOZ API (source pages, anchor text, domain authority). |
| get_moz_stored_metrics | moz | read | List stored/historical MOZ data for a server's canonicals with pagination. |
Tool Groups
This server organizes tools into groups that can be selectively enabled or disabled. Each group has two variants:
- Base group (e.g.,
newsletter): Full read + write access - Readonly group (e.g.,
newsletter_readonly): Read-only access
Available Groups
| Group | Tools | Description |
| ----------------------------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| newsletter | 6 | Full newsletter management (read + write) |
| newsletter_readonly | 3 | Newsletter read-only (get posts, authors) |
| server_directory | 27 | Comprehensive superset: includes all tools from mcp_servers, unofficial_mirrors, official_mirrors, official_queue, mcp_jsons, plus implementations/providers (read + write) |
| server_directory_readonly | 13 | Server directory read-only subset |
| official_queue | 7 | Full official mirror queue (read + write) |
| official_queue_readonly | 2 | Official mirror queue read-only |
| unofficial_mirrors | 5 | Full unofficial mirrors CRUD (read + write) |
| unofficial_mirrors_readonly | 2 | Unofficial mirrors read-only |
| official_mirrors | 2 | Official mirrors REST API (read-only) |
| official_mirrors_readonly | 2 | Official mirrors read-only (alias) |
| tenants | 2 | Tenants REST API (read-only) |
| tenants_readonly | 2 | Tenants read-only (alias) |
| mcp_jsons | 5 | Full MCP JSON configurations (read + write) |
| mcp_jsons_readonly | 2 | MCP JSON configurations read-only |
| mcp_servers | 3 | Full MCP servers management (read + write) |
| mcp_servers_readonly | 2 | MCP servers read-only (list, get) |
| redirects | 5 | Full URL redirect management (read + write) |
| redirects_readonly | 2 | URL redirects read-only (list, get) |
| good_jobs | 10 | Full GoodJob background job management (read + write) |
| good_jobs_readonly | 5 | GoodJob read-only (list, get, stats, processes, cron) |
| proctor | 5 | Proctor exam execution, result retrieval, and result storage (read + write) |
| proctor_readonly | 3 | Proctor results read-only (get_exam_result, list_proctor_runs, get_proctor_metadata) |
| discovered_urls | 3 | Discovered URL management (read + write) |
| discovered_urls_readonly | 2 | Discovered URL tools read-only (list, stats) |
| moz | 3 | MOZ SEO metrics — live URL metrics, backlinks, and stored historical data (all read-only) |
| moz_readonly | 3 | MOZ tools read-only (alias — all MOZ tools are read-only) |
Tools by Group
- newsletter / newsletter_readonly:
- Read-only:
get_newsletter_posts,get_newsletter_post,get_authors - Write:
draft_newsletter_post,update_newsletter_post,upload_image
- Read-only:
- server_directory / server_directory_readonly (superset — includes tools from mcp_servers, unofficial_mirrors, official_mirrors, official_queue, and mcp_jsons):
- Read-only:
search_mcp_implementations,get_draft_mcp_implementations,find_providers,list_mcp_servers,get_mcp_server,get_unofficial_mirrors,get_unofficial_mirror,get_official_mirrors,get_official_mirror,get_official_mirror_queue_items,get_official_mirror_queue_item,get_mcp_jsons,get_mcp_json - Write:
save_mcp_implementation,send_impl_posted_notif,update_mcp_server,create_unofficial_mirror,update_unofficial_mirror,delete_unofficial_mirror,approve_official_mirror_queue_item,approve_mirror_no_modify,reject_official_mirror_queue_item,add_official_mirror_to_regular_queue,unlink_official_mirror_queue_item,create_mcp_json,update_mcp_json,delete_mcp_json
- Read-only:
- official_queue / official_queue_readonly:
- Read-only:
get_official_mirror_queue_items,get_official_mirror_queue_item - Write:
approve_official_mirror_queue_item,approve_mirror_no_modify,reject_official_mirror_queue_item,add_official_mirror_to_regular_queue,unlink_official_mirror_queue_item
- Read-only:
- unofficial_mirrors / unofficial_mirrors_readonly:
- Read-only:
get_unofficial_mirrors,get_unofficial_mirror - Write:
create_unofficial_mirror,update_unofficial_mirror,delete_unofficial_mirror
- Read-only:
- official_mirrors / official_mirrors_readonly:
- Read-only:
get_official_mirrors,get_official_mirror
- Read-only:
- tenants / tenants_readonly:
- Read-only:
get_tenants,get_tenant
- Read-only:
- mcp_jsons / mcp_jsons_readonly:
- Read-only:
get_mcp_jsons,get_mcp_json - Write:
create_mcp_json,update_mcp_json,delete_mcp_json
- Read-only:
- mcp_servers / mcp_servers_readonly:
- Read-only:
list_mcp_servers,get_mcp_server - Write:
update_mcp_server
- Read-only:
- redirects / redirects_readonly:
- Read-only:
get_redirects,get_redirect - Write:
create_redirect,update_redirect,delete_redirect
- Read-only:
- good_jobs / good_jobs_readonly:
- Read-only:
list_good_jobs,get_good_job,list_good_job_cron_schedules,list_good_job_processes,get_good_job_queue_statistics - Write:
retry_good_job,discard_good_job,reschedule_good_job,force_trigger_good_job_cron,cleanup_good_jobs
- Read-only:
- proctor / proctor_readonly:
- Read-only:
get_exam_result,list_proctor_runs,get_proctor_metadata - Write:
run_exam_for_mirror,save_results_for_mirror
- Read-only:
- discovered_urls / discovered_urls_readonly:
- Read-only:
list_discovered_urls,get_discovered_url_stats - Write:
mark_discovered_url_processed
- Read-only:
- moz / moz_readonly:
- Read-only:
get_moz_metrics,get_moz_backlinks,get_moz_stored_metrics
- Read-only:
Environment Variables
| Variable | Description | Default |
| ------------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| TOOL_GROUPS | Comma-separated list of enabled tool groups | newsletter,server_directory,official_queue,unofficial_mirrors,official_mirrors,tenants,mcp_jsons,mcp_servers,redirects,good_jobs,proctor,discovered_urls,moz (all base groups) |
Examples
Enable all tools with full access (default):
# No environment variables needed - all base groups enabledEnable only newsletter tools:
TOOL_GROUPS=newsletterEnable server_directory with read-only access:
TOOL_GROUPS=server_directory_readonlyEnable all groups with read-only access:
TOOL_GROUPS=newsletter_readonly,server_directory_readonly,official_queue_readonly,unofficial_mirrors_readonly,official_mirrors_readonly,tenants_readonly,mcp_jsons_readonly,mcp_servers_readonly,redirects_readonly,good_jobs_readonly,proctor_readonly,discovered_urls_readonly,moz_readonlyNote: proctor_readonly includes only get_exam_result for retrieving stored results. notifications has no readonly variant since sending emails is always a write operation.
Mix full and read-only access per group:
# Full newsletter access, read-only server_directory, no official_queue
TOOL_GROUPS=newsletter,server_directory_readonlyUsage Tips
- Use
get_newsletter_poststo browse existing content before creating new posts - When uploading images, both
post_slugandfile_nameare required - Draft posts allow you to prepare content without immediately publishing
- Search functionality supports finding posts by title, content, or metadata
- The update tool allows modifying all post metadata except status
- Use author slugs when creating posts (e.g., "sarah-chen", "john-doe")
- Use MCP server/client slugs for featured content (e.g., "github-mcp", "claude-desktop")
- Use
search_mcp_implementationsto discover MCP servers and clients in the PulseMCP registry - Enable or disable specific tool groups by setting
TOOL_GROUPSenvironment variable - Use
_readonlysuffixes to restrict groups to read-only operations (e.g.,server_directory_readonly) - Use the
remotearray parameter insave_mcp_implementationto configure remote endpoints for MCP servers (transport, host_platform, authentication_method, etc.) - Use the
canonicalarray parameter insave_mcp_implementationto set canonical URLs with scope (domain, subdomain, or url) - Remote endpoints allow specifying how MCP servers can be accessed (direct URL, setup URL, authentication method, cost, etc.)
- When updating existing remotes, include the remote
id(number fromget_draft_mcp_implementations) in the remote object - Use
list_mcp_serversto browse MCP servers with filtering by status (draft/live/archived) and classification (official/community) - Use
get_mcp_serverto get a unified view of all server data including provider, source code, canonicals, remotes, and tags - Use
update_mcp_serverto update any admin UI field: name, description, provider, source code, package info, tags, canonicals, remotes, etc. - The
mcp_serverstools abstract away the MCPImplementation → MCPServer data model complexity
Examples
Search for Newsletter Posts
User: Can you find all newsletter posts about MCP servers?
Assistant: I'll search for newsletter posts about MCP servers.
[Calls get_newsletter_posts with search="MCP servers"]
I found 3 newsletter posts about MCP servers:
1. **"Top 10 MCP Servers This Week"** (2024-01-15)
- Weekly roundup of the most popular MCP servers
2. **"Building Your First MCP Server"** (2024-01-08)
- Tutorial on creating custom MCP servers
3. **"MCP Server Security Best Practices"** (2023-12-28)
- Guide to securing MCP server deploymentsCreate a Draft Post
User: Create a draft newsletter post about the new weather MCP serverAssistant: I'll create a draft newsletter post about the new weather MCP server.
[Calls draft_newsletter_post with title, body, slug, and author_slug]
I've created a draft newsletter post titled "New Weather MCP Server: Real-time Forecasts in Your LLM" with the slug "weather-mcp-server-launch". The draft has been saved and can be edited or published later.Upload and Attach an Image
User: Upload this screenshot to the weather server post I just createdAssistant: I'll upload the screenshot and attach it to your weather server post.
[Calls upload_image with post_slug="weather-mcp-server-launch" and file_name="weather-dashboard.png"]
The screenshot has been successfully uploaded and attached to the "weather-mcp-server-launch" post. The image is now available at: https://storage.pulsemcp.com/images/newsletter/weather-dashboard.pngUpdate an Existing Post
User: Update the weather post to include information about the new temperature alerts featureAssistant: I'll update the weather MCP server post to include information about the temperature alerts feature.
[Calls update_newsletter_post with slug="weather-mcp-server-launch" and updated content]
I've successfully updated the "New Weather MCP Server" post to include a section about the temperature alerts feature. The post now covers both the real-time forecasts and the new alert system.Search for MCP Implementations
User: Find MCP servers related to weather or climate
Assistant: I'll search for MCP servers related to weather and climate.
[Calls search_mcp_implementations with search="weather climate"]
I found 2 MCP servers related to weather and climate:
1. **Weather MCP Server** (weather-mcp)
- Real-time weather data and forecasting capabilities
2. **Climate Data MCP Client** (climate-data-mcp)
- Access climate research and environmental dataSetup
Cheatsheet
Quick setup:
# Install dependencies
npm run install-all
# Build the server
npm run build
# Set your API key
export PULSEMCP_ADMIN_API_KEY="your-api-key-here"
# Run the server
cd local && npm startClaude Desktop
Add to your Claude Desktop configuration:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"pulsemcp-cms-admin": {
"command": "node",
"args": ["/path/to/pulsemcp-cms-admin/local/build/index.js"],
"env": {
"PULSEMCP_ADMIN_API_KEY": "your-api-key-here",
"TOOL_GROUPS": "newsletter,server_directory,official_queue,unofficial_mirrors,official_mirrors,tenants,mcp_jsons,mcp_servers,redirects,good_jobs,proctor"
}
}
}
}For read-only access:
{
"mcpServers": {
"pulsemcp-cms-admin-readonly": {
"command": "node",
"args": ["/path/to/pulsemcp-cms-admin/local/build/index.js"],
"env": {
"PULSEMCP_ADMIN_API_KEY": "your-api-key-here",
"TOOL_GROUPS": "newsletter_readonly,server_directory_readonly,official_queue_readonly,unofficial_mirrors_readonly,official_mirrors_readonly,tenants_readonly,mcp_jsons_readonly,mcp_servers_readonly,redirects_readonly,good_jobs_readonly"
}
}
}
}Manual Setup
If you prefer to run the server manually:
cd /path/to/pulsemcp-cms-admin/local
PULSEMCP_ADMIN_API_KEY="your-api-key-here" node build/index.jsLicense
MIT
