{"name":"net.quantumcx/pseo-engine","slug":"quantumcx-pseo-engine","title":"pSEO Engine","description":"Programmatic SEO as callable tools: research, generate, audit and publish landing pages.","url":"https://mcp.market/server/quantumcx-pseo-engine","rating":null,"grade":"C","score":67,"certified":false,"status":"active","category":"seo","tags":["seo"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":1,"ok":1,"last_checked_at":"2026-09-19T19:55:30.158Z","last_ok_at":"2026-09-19T19:55:30.158Z","latency_ms":1762},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://quantumcx.net/pseo-engine","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://pseo.quantumcx.net/api/agent/mcp","headers":[{"description":"Your agent API key. Sign up at https://pseo.quantumcx.net/signup?for=agent and create a key on the Agent keys page.","isRequired":true,"isSecret":true,"name":"X-Agent-API-Key"}]}],"packages":[],"tools":[{"name":"seo_audit_start","description":"ASYNCHRONOUS. Scans all generated pages for broken text, unfilled placeholders, truncated copy and missing images, recording findings per page. Returns a jobId; poll seo_job_status. This only REPORTS problems — it does not fix them. Costs 30c per call.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"description":"The project id, exactly as returned by seo_project_list (a cuid such as 'cmtjyi1q20000l204octn48ai'). Not the slug, not the display name. If you do not have one, call seo_project_list first."}},"required":["projectId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"seo_content_generate","description":"ASYNCHRONOUS. Starts the content-generation queue over every PENDING row in the project. It also spends real AI budget per generated page. Requires the project to be configured (check readyToGenerate via seo_project_get first). Returns a jobId immediately; poll seo_job_status. Generated pages land in GENERATED status and are NOT live until approved and published. Costs 75c per call.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"description":"The project id, exactly as returned by seo_project_list (a cuid such as 'cmtjyi1q20000l204octn48ai'). Not the slug, not the display name. If you do not have one, call seo_project_list first."}},"required":["projectId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"seo_job_status","description":"Returns the most recent background job for a project: type, status (QUEUED/RUNNING/COMPLETED/FAILED/CANCELLED), progress counters and the last log line. Poll this every few seconds after any tool that starts a job. Do NOT re-call the start tool while status is RUNNING; it will be refused. FREE — this call costs nothing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"description":"The project id, exactly as returned by seo_project_list (a cuid such as 'cmtjyi1q20000l204octn48ai'). Not the slug, not the display name. If you do not have one, call seo_project_list first."}},"required":["projectId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"seo_project_connect_ai","description":"Stores the AI provider key this project's generation, audits and research run on — BYOK: the tokens bill YOUR provider account, not ours. Recommended: a Google Gemini API key (aistudio.google.com/apikey); its free tier works with no card. Optionally stores a Perplexity API key to enable citation-bearing AI visibility checks. Keys are stored encrypted and can never be read back — only replaced or cleared. FREE — this call costs nothing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"description":"The project id, exactly as returned by seo_project_list (a cuid such as 'cmtjyi1q20000l204octn48ai'). Not the slug, not the display name. If you do not have one, call seo_project_list first."},"aiApiKey":{"description":"The AI provider key to store (replaces any stored one). Omit to leave unchanged.","type":"string"},"aiBaseUrl":{"description":"Optional OpenAI-compatible base URL; defaults to Google's Gemini endpoint.","type":"string"},"aiModel":{"description":"Optional model id; defaults to gemini-2.5-flash on the Gemini endpoint.","type":"string"},"perplexityApiKey":{"description":"Optional Perplexity API key for visibility checks; replaces any stored one. Omit to leave unchanged.","type":"string"},"clearAiKey":{"description":"Pass true to REMOVE the stored AI key — generation stops until a new one is connected.","type":"boolean"},"clearPerplexityKey":{"description":"Pass true to REMOVE the stored Perplexity key.","type":"boolean"}},"required":["projectId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"seo_project_create","description":"Creates a new programmatic-SEO project and returns its projectId. Call this when seo_project_list comes back empty — every other tool needs a projectId and a new account has none. The project is created EMPTY: it still needs a data source and a content spec before seo_content_generate will run, so call seo_project_get afterwards and read readinessNote. FREE — this call costs nothing.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"description":"Display name, e.g. 'Plumbers by city'. The URL slug is derived from it automatically."},"domain":{"description":"Optional custom domain the pages will be published on, e.g. 'example.com'. Omit to serve them under the platform's own domain.","type":"string"},"template":{"description":"Page template. Defaults to 'location'.","type":"string","enum":["location","industry","comparison","all"]},"aiApiKey":{"description":"BYOK: the AI provider key this project runs on (stored encrypted). Recommended: a Google Gemini key from aistudio.google.com/apikey — its free tier works with no card. Omit to connect later via seo_project_connect_ai.","type":"string"},"aiBaseUrl":{"description":"Optional OpenAI-compatible base URL for the key. Defaults to Google's Gemini endpoint. Example for OpenRouter: https://openrouter.ai/api/v1","type":"string"},"aiModel":{"description":"Optional model id. Defaults to gemini-2.5-flash on the Gemini endpoint.","type":"string"},"perplexityApiKey":{"description":"Optional Perplexity API key (api.perplexity.ai) to enable citation-bearing AI visibility checks for this project. Stored encrypted.","type":"string"}},"required":["name"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"seo_project_get","description":"Returns one project's settings and whether it is configured enough to generate content (needs both a field mapping and a content spec). Use this before seo_content_generate to avoid starting a run that will immediately fail. FREE — this call costs nothing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"description":"The project id, exactly as returned by seo_project_list (a cuid such as 'cmtjyi1q20000l204octn48ai'). Not the slug, not the display name. If you do not have one, call seo_project_list first."}},"required":["projectId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"seo_project_list","description":"Lists every programmatic-SEO project this API key can act on, with id, name, slug, custom domain and page count. Call this FIRST in any session — every other tool needs a projectId from here, and ids cannot be guessed or carried over from another account. FREE — this call costs nothing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"seo_publish","description":"SYNCHRONOUS. Takes approved pages live. IMPORTANT: only rows in REVIEWED status are published — GENERATED drafts are deliberately skipped, because approval is a human gate in this product. The response reports how many were skipped and why; if publishedCount is 0 and skippedNeedsReview is high, the pages need approving in the dashboard first. Costs 15c per call.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"description":"The project id, exactly as returned by seo_project_list (a cuid such as 'cmtjyi1q20000l204octn48ai'). Not the slug, not the display name. If you do not have one, call seo_project_list first."}},"required":["projectId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"seo_research_start","description":"ASYNCHRONOUS. Starts a keyword-research run that mines and qualifies keywords into PENDING rows. It spends real AI budget, so call it once and then poll seo_job_status until status is COMPLETED. Returns immediately with a jobId — the keywords do NOT exist yet when this returns. Fails if a research run is already in progress. HUMAN trial accounts get one research run free; a second run returns code card_required — only a human on the account can start a plan, so stop and report instead of retrying. Costs 750c per call.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"description":"The project id, exactly as returned by seo_project_list (a cuid such as 'cmtjyi1q20000l204octn48ai'). Not the slug, not the display name. If you do not have one, call seo_project_list first."},"brief":{"type":"string","minLength":10,"description":"One or two sentences describing the niche and the customer, e.g. 'Plumbing lead generation for independent plumbers across UK cities'. Must be at least 10 characters — a bare keyword is not enough context to mine from."},"targetCount":{"default":200,"description":"How many keywords to mine, 10-2000. Higher costs more AI time. Start around 200 unless told otherwise.","type":"integer","minimum":10,"maximum":2000}},"required":["projectId","brief"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"seo_rows_list","description":"Returns a page of rows (individual generated pages) with slug, target keyword and status. Statuses are PENDING (no content yet), GENERATING, GENERATED (draft), REVIEWED (approved), PUBLISHED (live), FAILED, FLAGGED_DUPLICATE. Content bodies are NOT included — this is a listing, not an export. Use sort:'risk' to get the review queue ordered by risk score (duplicates and pages with QA findings first) so a human reviews the riskiest pages before bulk-approving the safe ones. Costs 3c per call.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"description":"The project id, exactly as returned by seo_project_list (a cuid such as 'cmtjyi1q20000l204octn48ai'). Not the slug, not the display name. If you do not have one, call seo_project_list first."},"status":{"description":"Optional exact status filter. Omit for all statuses. Must be one of the listed values, uppercase.","type":"string","enum":["PENDING","GENERATING","GENERATED","REVIEWED","PUBLISHED","FAILED","FLAGGED_DUPLICATE"]},"sort":{"description":"'risk' returns pages ordered by review risk (highest first), each with a score, band and human-readable reasons. Omit for creation order.","type":"string","enum":["createdAt","risk"]},"limit":{"default":50,"description":"How many rows to return, 1-200. Defaults to 50. Values above 200 are rejected — page through instead of asking for everything.","type":"integer","minimum":1,"maximum":200}},"required":["projectId"],"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":67,"grade":"C","scanned_at":"2026-09-19T19:16:54.382Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:16:54.394Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 481ms"]},"poisoning":{"score":15,"max":15,"notes":["10 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://pseo.quantumcx.net/api/agent/mcp","reachable":true,"authRequired":false,"latencyMs":481,"serverInfo":{"name":"pseo-engine","version":"1.0.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://quantumcx.net/icon.svg?icon.0-rzpokpezr7y.svg","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}