panini-connector-mcp
v0.1.2
Published
MCP server for AI-agent-driven install + verification of the panini-connector SDK. Give Claude Desktop, Cursor, or Windsurf the ability to wire a customer's self-hosted site to Panini without human intervention.
Downloads
401
Maintainers
Readme
panini-connector-mcp
MCP server that lets AI coding agents (Claude Desktop, Cursor, Windsurf, Claude Code, etc.) install and verify the panini-connector SDK on a customer's self-hosted site — end-to-end, without human copy-pasting.
Companion to the wizard at panini.autoscreen.ai — same code generation, same verify flow, exposed as MCP tools an agent can call.
What it does
Exposes 4 tools over the Model Context Protocol:
| Tool | What it does |
|---|---|
| install_panini_connector | Given (language, framework, storage), returns the install command + files to write + env vars to set. Handles Next.js App/Pages, Express, FastAPI, Django, Flask. Storage: Supabase, Postgres, custom DB (MySQL/Mongo/etc.), or in-memory. |
| verify_panini_connector | Fires all 4 signed HTTP ops (ping / create_post / update_post / delete_post) at the deployed URL. Returns per-op status + diagnostics. Cleans up its own smoke-test post. |
| generate_shared_secret | Returns a cryptographically-random 32-byte hex secret for SEO_CONNECTOR_SECRET. |
| get_envelope_schema | Returns the raw HTTP envelope contract Panini uses. For agents implementing custom handlers in languages the SDK doesn't cover (Laravel, Rails, Go, .NET, etc.). |
Install (one line per client)
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%/Claude/claude_desktop_config.json (Windows):
{
"mcpServers": {
"panini-connector": {
"command": "npx",
"args": ["-y", "panini-connector-mcp"]
}
}
}Windows note: GUI apps don't inherit shell PATH. Use cmd as the command instead:
{
"mcpServers": {
"panini-connector": {
"command": "cmd",
"args": ["/c", "npx", "-y", "panini-connector-mcp"]
}
}
}Restart Claude Desktop. You should see 4 new tools available.
Cursor
Settings → Cursor Settings → MCP → Add new MCP server:
{
"mcpServers": {
"panini-connector": {
"command": "npx",
"args": ["-y", "panini-connector-mcp"]
}
}
}Windsurf
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"panini-connector": {
"command": "npx",
"args": ["-y", "panini-connector-mcp"]
}
}
}Claude Code (CLI)
claude mcp add panini-connector -- npx -y panini-connector-mcpExample agent workflow
Once registered, prompt your AI:
"Install the panini-connector on this Next.js site. It uses Supabase — the table is
blog_postsand posts render at/blog/[slug]."
The agent will:
- Call
install_panini_connectorwithlanguage=node,framework=next_app,storage=supabase,existing_table=blog_posts,url_template=https://.../blog/{slug} - Read the returned
install_commandand runnpm install panini-connectorin your project - Write
app/api/seo-connector/route.tswith the returned file content - Call
generate_shared_secretand prompt you to addSEO_CONNECTOR_SECRET=<value>to your hosting env vars - Prompt you to redeploy
- Once deployed, call
verify_panini_connectorwith your URL + the secret - Report the result: 4 green ✓s means the round-trip works and you're ready to paste URL+secret into the Panini dashboard
Tool reference
install_panini_connector
Input:
language: 'node' | 'python'
framework: 'next_app' | 'next_pages' | 'express' | 'fastapi' | 'django' | 'flask'
storage: 'supabase' | 'postgres' | 'custom_db' | 'memory'
existing_table?: string // default 'blog_posts'
url_template?: string // default 'https://yoursite.com/blog/{slug}'
Output:
install_command: string // shell command to run in project root
files: [{ path, content, language }] // files the agent writes
env_vars: string // env vars to set on hosting
post_install_note?: string // gotchas (bodyParser: false, etc.)
verify_command: string // manual CLI verification commandFramework/language pairing:
node→next_app|next_pages|expresspython→fastapi|django|flask
verify_panini_connector
Input:
url: string // https://mysite.com/api/seo-connector
secret: string // exact SEO_CONNECTOR_SECRET value
timeout_ms?: number // default 10000
Output:
ok: boolean
url: string
ops: [{
op: 'ping' | 'create_post' | 'update_post' | 'delete_post'
status: 'pass' | 'fail'
http_status?: number
response_body?: unknown
error?: string
}]
summary: stringgenerate_shared_secret
Input: {}
Output: { secret: string, length_bytes: 32 }get_envelope_schema
Input: {}
Output: {
http_method: 'POST'
request_headers: { ... }
request_body_shape: { ... }
response_success: { ... }
response_ping: { ... }
response_errors: { ... }
replay_window_seconds: 300
hmac_pseudocode: string
laravel_example: string
}Use this when the customer's stack isn't Node or Python — the returned contract is enough for an agent to hand-implement the connector in any language.
Running locally / debugging
# Test the server directly (JSON-RPC over stdio)
npx panini-connector-mcp
# then type an MCP initialize request; server responds on stdout, logs on stderr
# Or with the MCP inspector
npx @modelcontextprotocol/inspector npx panini-connector-mcpLicense
MIT.
