{"id":347675,"date":"2026-08-02T21:39:18","date_gmt":"2026-08-02T21:39:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-provider-for-cursor\/"},"modified":"2026-08-02T21:39:09","modified_gmt":"2026-08-02T21:39:09","slug":"ai-provider-for-cursor","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ai-provider-for-cursor\/","author":13981553,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.7","stable_tag":"0.1.7","tested":"7.0.2","requires":"7.0","requires_php":"7.4","requires_plugins":null,"header_name":"AI Provider for Cursor","header_author":"Rafa Carvalhido","header_description":"AI Provider for Cursor Cloud Agents for the WordPress AI Client.","assets_banners_color":"141720","last_updated":"2026-08-02 21:39:09","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/linknabio.gg\/rafa_carvalhido_wp","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/ai-provider-for-cursor\/","header_author_uri":"https:\/\/profissionalwp.dev.br\/blog\/contato\/rafa-carvalhido\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":35,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.7":{"tag":"0.1.7","author":"rafacarvalhido","date":"2026-08-02 21:39:09"}},"upgrade_notice":{"0.1.7 - 2026-07-30":"<p>API key is now configured only via Settings \u2192 Connectors (or CURSOR_API_KEY). Plugin settings keep poll\/model\/archive options.<\/p>","0.1.6 - 2026-07-28":"<p>Plugin Check compliance fixes and main file rename to ai-provider-for-cursor.php. Reactivate the plugin if WordPress deactivated it after the rename.<\/p>","0.1.5 - 2026-07-28":"<p>Readme and compliance updates for WordPress.org submission. No functional changes to text generation.<\/p>","0.1.4 - 2026-07-28":"<p>Fixes empty summaries when Cursor create returns FINISHED without result text.<\/p>","0.1.3 - 2026-07-28":"<p>Fixes Cloud Agent requests timing out at the default 30s WordPress AI Client HTTP limit.<\/p>","0.1.2 - 2026-07-27":"<p>Fixes summarization and other AI features failing text-generation support checks with Cursor.<\/p>","0.1.1 - 2026-07-27":"<p>Fixes WordPress AI plugin credential detection for the Cursor connector.<\/p>","0.1.0 - 2026-07-27":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3632112,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3632112,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3632112,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3632112,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3632112,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250},"banner.svg":{"filename":"banner.svg","revision":3632112,"resolution":false,"location":"assets","locale":false}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.7"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,5739,274265,25308,21364],"plugin_category":[],"plugin_contributors":[169137],"plugin_business_model":[],"class_list":["post-347675","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-artificial-intelligence","plugin_tags-cloud-agents","plugin_tags-connector","plugin_tags-cursor","plugin_contributors-rafacarvalhido","plugin_committers-rafacarvalhido"],"banners":{"banner":"https:\/\/ps.w.org\/ai-provider-for-cursor\/assets\/banner-772x250.png?rev=3632112","banner_2x":"https:\/\/ps.w.org\/ai-provider-for-cursor\/assets\/banner-1544x500.png?rev=3632112","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/ai-provider-for-cursor\/assets\/icon.svg?rev=3632112","icon":"https:\/\/ps.w.org\/ai-provider-for-cursor\/assets\/icon.svg?rev=3632112","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>This plugin connects WordPress to <a href=\"https:\/\/cursor.com\/\">Cursor<\/a> Cloud Agents so the WordPress AI Client can generate text through the <code>cursor<\/code> provider.<\/p>\n\n<p>This is an <strong>unofficial, third-party connector<\/strong>. It is not affiliated with, endorsed by, or sponsored by Cursor or Anysphere. \"Cursor\" is a trademark of Anysphere, Inc.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Registers a <code>cursor<\/code> provider with the WordPress AI Client<\/li>\n<li>Text generation via Cursor Cloud Agents (no-repository agents)<\/li>\n<li>Dynamic model discovery from <code>GET \/v1\/models<\/code><\/li>\n<li>API key managed by WordPress Settings \u2192 Connectors (or <code>CURSOR_API_KEY<\/code>)<\/li>\n<li>Plugin settings page for polling options, default model, and archive behavior<\/li>\n<\/ul>\n\n<p><strong>Requirements:<\/strong><\/p>\n\n<ul>\n<li>WordPress 7.0 or higher (AI Client and Connectors API in core)<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>A Cursor API key from <a href=\"https:\/\/cursor.com\/dashboard\/api\">cursor.com\/dashboard\/api<\/a><\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on the <strong>Cursor Cloud Agents API<\/strong>, operated by Anysphere, Inc. (<a href=\"https:\/\/cursor.com\/\">cursor.com<\/a>). Without a valid Cursor API key and an active internet connection, the plugin cannot generate text or list models.<\/p>\n\n<p><strong>When data is sent<\/strong><\/p>\n\n<p>Data is transmitted to Cursor when:<\/p>\n\n<ul>\n<li>WordPress or custom code uses the WordPress AI Client with the <code>cursor<\/code> provider (for example summarization, title generation, excerpts, or your own <code>AiClient::prompt()<\/code> calls).<\/li>\n<li>The plugin discovers available models for your account (for example when loading provider metadata).<\/li>\n<li>Optional: after a successful text generation, if <strong>Archive agent after run<\/strong> is enabled, the plugin asks Cursor to archive the finished Cloud Agent.<\/li>\n<\/ul>\n\n<p>Saving your API key in WordPress stores it locally via Settings \u2192 Connectors. The key is sent to Cursor only inside authenticated API requests, not to the plugin author.<\/p>\n\n<p><strong>What is sent<\/strong><\/p>\n\n<ul>\n<li>Your Cursor API key (HTTP Basic authentication on every API request).<\/li>\n<li>Prompt text built from user and assistant messages, including any system instruction and any post or content text included in the AI request.<\/li>\n<li>Optional model ID when you or calling code selects a specific model.<\/li>\n<li>Agent and run identifiers when polling run status or archiving an agent.<\/li>\n<\/ul>\n\n<p><strong>API endpoints used<\/strong><\/p>\n\n<p>All requests go to <code>https:\/\/api.cursor.com<\/code>:<\/p>\n\n<ul>\n<li><code>GET \/v1\/models<\/code> \u2014 list models available to your account<\/li>\n<li><code>POST \/v1\/agents<\/code> \u2014 create a Cloud Agent and start a text-generation run<\/li>\n<li><code>GET \/v1\/agents\/{agentId}\/runs\/{runId}<\/code> \u2014 poll run status and retrieve the generated text<\/li>\n<li><code>POST \/v1\/agents\/{agentId}\/archive<\/code> \u2014 optional cleanup after a successful run<\/li>\n<\/ul>\n\n<p><strong>Service links<\/strong><\/p>\n\n<ul>\n<li>Cursor website: <a href=\"https:\/\/cursor.com\/\">https:\/\/cursor.com\/<\/a><\/li>\n<li>Cloud Agents API documentation: <a href=\"https:\/\/cursor.com\/docs\/cloud-agent\/api\/endpoints\">https:\/\/cursor.com\/docs\/cloud-agent\/api\/endpoints<\/a><\/li>\n<li>API keys dashboard: <a href=\"https:\/\/cursor.com\/dashboard\/api\">https:\/\/cursor.com\/dashboard\/api<\/a><\/li>\n<li>Terms of Service: <a href=\"https:\/\/cursor.com\/terms-of-service\">https:\/\/cursor.com\/terms-of-service<\/a><\/li>\n<li>Privacy Policy: <a href=\"https:\/\/cursor.com\/privacy\">https:\/\/cursor.com\/privacy<\/a><\/li>\n<\/ul>\n\n<p>Usage may be subject to Cursor account limits and billing. This plugin does not include a Cursor subscription.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The Cursor API key is managed by WordPress Settings \u2192 Connectors (<code>connectors_ai_cursor_api_key<\/code>) unless you configure <code>CURSOR_API_KEY<\/code> in <code>wp-config.php<\/code> or as an environment variable. Those constant and environment sources override the database value. This plugin does not read that Connectors option; WordPress core injects credentials into the AI Client.<\/p>\n\n<p>This plugin stores only Cursor-specific behavior options in <code>ai_provider_for_cursor_settings<\/code> (default model, poll timeout, poll interval, archive after run).<\/p>\n\n<p>When AI features use the Cursor provider, prompt content is sent to Cursor's servers as described in <strong>External services<\/strong> above. This plugin does not send analytics or telemetry to the plugin author.<\/p>\n\n<p>On uninstall, the plugin settings option is removed. The Connectors API key option is left for WordPress \/ Connectors to manage.<\/p>\n\n<h3>Configuration<\/h3>\n\n<ol>\n<li>Create a Cursor API key at <a href=\"https:\/\/cursor.com\/dashboard\/api\">cursor.com\/dashboard\/api<\/a><\/li>\n<li><p>Open <strong>Settings \u2192 Connectors<\/strong>, find the Cursor card, and enter the API key<\/p>\n\n<ul>\n<li><p><strong>wp-config.php (recommended for production):<\/strong> add this line to <code>wp-config.php<\/code> <em>above<\/em> <code>\/* That's all, stop editing! *\/<\/code>:<\/p>\n\n<p>define( 'CURSOR_API_KEY', 'your-cursor-api-key-here' );<\/p><\/li>\n<\/ul><\/li>\n<\/ol>\n\n<ul>\n<li>You can also set a <code>CURSOR_API_KEY<\/code> environment variable (same name). Environment and the PHP constant both override the database value.\n\n<ol>\n<li>Optionally open <strong>Settings \u2192 AI Provider for Cursor<\/strong> to set:<\/li>\n<\/ol><\/li>\n<li>Default model ID (for example <code>composer-2<\/code>)<\/li>\n<li>Poll timeout \u2014 maximum seconds to wait for Cursor to finish<\/li>\n<li>Poll interval \u2014 how often (in seconds) WordPress asks Cursor whether the run is finished<\/li>\n<li>Archive agent after run \u2014 whether to clean up the finished Cloud Agent on Cursor's side\n\n<ol>\n<li>Confirm the Cursor connector shows as connected on <strong>Settings \u2192 Connectors<\/strong><\/li>\n<\/ol><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/ai-provider-for-cursor\/<\/code><\/li>\n<li>Activate the plugin through the Plugins screen in WordPress<\/li>\n<li>Configure the plugin (see Configuration below)<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20enter%20the%20api%20key%3F\"><h3>Where do I enter the API key?<\/h3><\/dt>\n<dd><p>On <strong>Settings \u2192 Connectors<\/strong>. For production, prefer defining <code>CURSOR_API_KEY<\/code> in <code>wp-config.php<\/code> (see Configuration). Cursor-specific poll and model options are on <strong>Settings \u2192 AI Provider for Cursor<\/strong>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20store%20the%20api%20key%20in%20wp-config.php%3F\"><h3>How do I store the API key in wp-config.php?<\/h3><\/dt>\n<dd><p>Open <code>wp-config.php<\/code> in the root of your WordPress install and add this line <strong>above<\/strong> <code>\/* That's all, stop editing! *\/<\/code>:<\/p>\n\n<pre><code>define( 'CURSOR_API_KEY', 'your-cursor-api-key-here' );\n<\/code><\/pre>\n\n<p>Replace the placeholder with your real Cursor API key. Reload <strong>Settings \u2192 Connectors<\/strong> \u2014 WordPress should detect the constant as the key source.<\/p><\/dd>\n<dt id=\"what%20data%20does%20this%20plugin%20send%20to%20cursor%3F\"><h3>What data does this plugin send to Cursor?<\/h3><\/dt>\n<dd><p>When the Cursor provider is used, WordPress sends your API key and the prompt text for that request (including system instructions and any content included by the calling feature) to <code>https:\/\/api.cursor.com<\/code>. See <strong>External services<\/strong> for endpoints, timing, and links to Cursor's terms and privacy policy.<\/p><\/dd>\n<dt id=\"does%20this%20require%20wordpress%207.0%3F\"><h3>Does this require WordPress 7.0?<\/h3><\/dt>\n<dd><p>Yes. The WordPress AI Client and Connectors API shipped in WordPress 7.0.<\/p><\/dd>\n<dt id=\"why%20can%20requests%20take%20a%20long%20time%3F\"><h3>Why can requests take a long time?<\/h3><\/dt>\n<dd><p>Cursor Cloud Agents run asynchronously. This plugin creates an agent, polls the run until it finishes, then returns the final <code>result<\/code> text. Increase the poll timeout if your host allows longer PHP execution times.<\/p><\/dd>\n<dt id=\"what%20is%20poll%20timeout%3F\"><h3>What is Poll timeout?<\/h3><\/dt>\n<dd><p>The maximum number of seconds WordPress will wait for a Cursor Cloud Agent run to finish. If Cursor has not finished by then, the request fails with a timeout error. Default is 120 seconds. Increase it if answers often fail with timeout; lower it only if you want failures to surface faster.<\/p><\/dd>\n<dt id=\"what%20is%20poll%20interval%3F\"><h3>What is Poll interval?<\/h3><\/dt>\n<dd><p>How many seconds to wait between each status check while a Cloud Agent is still running. For example, with interval <code>2<\/code>, WordPress asks Cursor roughly every 2 seconds whether the run is finished. The default (<code>2<\/code>) is a good balance for most sites: lower values check more often (slightly more API traffic); higher values check less often (slightly slower to notice completion). Most users can leave this at the default.<\/p><\/dd>\n<dt id=\"what%20does%20archive%20agent%20after%20run%20do%3F\"><h3>What does Archive agent after run do?<\/h3><\/dt>\n<dd><p>Each text generation creates a Cloud Agent on Cursor's side. When this option is enabled (the default), the plugin asks Cursor to archive that agent after a successful reply, so finished agents do not pile up in your Cursor dashboard. Turn it off only if you want to keep those agents visible in Cursor for inspection or follow-up. Archiving is best-effort: if the archive call fails, your generated text is still returned.<\/p><\/dd>\n<dt id=\"recommended%20defaults%20for%20these%20options%3F\"><h3>Recommended defaults for these options?<\/h3><\/dt>\n<dd><p>For most sites: poll timeout <code>120<\/code>, poll interval <code>2<\/code>, and keep <strong>Archive agent after run<\/strong> enabled. Change them only if you hit timeouts, want fewer status checks, or need to keep agents listed in Cursor.<\/p><\/dd>\n<dt id=\"how%20do%20i%20use%20cursor%20from%20php%3F\"><h3>How do I use Cursor from PHP?<\/h3><\/dt>\n<dd><p>After configuring the API key on Settings \u2192 Connectors (or via <code>CURSOR_API_KEY<\/code>):<\/p>\n\n<pre><code>AiClient::prompt( 'Write a short product description.' )-&gt;usingProvider( 'cursor' )-&gt;generateTextResult();\n<\/code><\/pre>\n\n<p>You can also select a model with <code>usingModel( 'composer-2' )<\/code> (exact IDs come from your Cursor account via <code>GET \/v1\/models<\/code>).<\/p><\/dd>\n<dt id=\"is%20this%20an%20official%20cursor%20plugin%3F\"><h3>Is this an official Cursor plugin?<\/h3><\/dt>\n<dd><p>No. It is a community \/ third-party WordPress plugin that uses Cursor's public Cloud Agents API. It is not affiliated with, endorsed by, or sponsored by Cursor or Anysphere.<\/p><\/dd>\n<dt id=\"will%20every%20ai%20feature%20in%20wordpress%20use%20cursor%20automatically%3F\"><h3>Will every AI feature in WordPress use Cursor automatically?<\/h3><\/dt>\n<dd><p>No. Only features and code that explicitly use the WordPress AI Client with <code>usingProvider( 'cursor' )<\/code> (or select Cursor where supported) will call Cursor. Other plugins that hard-code their own provider list may ignore the Cursor provider even when it shows as connected under <strong>Settings \u2192 Connectors<\/strong>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.7 - 2026-07-30<\/h4>\n\n<ul>\n<li>WordPress.org review: stop reading Connectors API keys; let Settings \u2192 Connectors and core AI Client own credentials<\/li>\n<li>Remove custom Connectors card override so the native API key field is used<\/li>\n<li>Remove legacy basename shim and active_plugins \/ approval migrations<\/li>\n<li>Plugin settings page keeps only poll, model, and archive options<\/li>\n<\/ul>\n\n<h4>0.1.6 - 2026-07-28<\/h4>\n\n<ul>\n<li>Fix Plugin Check findings: escape exception messages, sanitize numeric settings, protect autoload direct access, remove discouraged load_plugin_textdomain, drop unnecessary $_GET usage in admin enqueue, and remove hidden .gitignore from wordpress-org assets folder<\/li>\n<li>Rename main plugin file to ai-provider-for-cursor.php<\/li>\n<\/ul>\n\n<h4>0.1.5 - 2026-07-28<\/h4>\n\n<ul>\n<li>Document Cursor API usage, data transmission, and privacy for WordPress.org review<\/li>\n<li>Add <code>load_plugin_textdomain()<\/code> and <code>Domain Path<\/code> header for translations<\/li>\n<li>Align license URI with readme; remove third-party product-specific FAQ entry<\/li>\n<\/ul>\n\n<h4>0.1.4 - 2026-07-28<\/h4>\n\n<ul>\n<li>Fix: poll Get A Run when create returns FINISHED without <code>result<\/code>, so summaries are not empty<\/li>\n<\/ul>\n\n<h4>0.1.3 - 2026-07-28<\/h4>\n\n<ul>\n<li>Fix: raise HTTP timeout for Cloud Agent create\/poll above the WordPress AI Client default of 30s<\/li>\n<li>Omit model id when it is <code>default<\/code>\/<code>auto<\/code> so Cursor resolves the account default<\/li>\n<\/ul>\n\n<h4>0.1.2 - 2026-07-27<\/h4>\n\n<ul>\n<li>Fix: declare temperature and related model options so AI plugin features (summarization, titles, excerpts) pass text-generation support checks<\/li>\n<\/ul>\n\n<h4>0.1.1 - 2026-07-27<\/h4>\n\n<ul>\n<li>Fix: expose Cursor as an <code>api_key<\/code> Connectors auth method so the WordPress AI plugin detects credentials<\/li>\n<li>Sync the API key with the canonical <code>connectors_ai_cursor_api_key<\/code> option<\/li>\n<li>Declare credentials via <code>wpai_has_ai_credentials<\/code> and <code>wpai_is_cursor_connector_configured<\/code><\/li>\n<\/ul>\n\n<h4>0.1.0 - 2026-07-27<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Cursor provider registration for the WordPress AI Client<\/li>\n<li>Settings page for API key, default model, and poll options<\/li>\n<li>Connectors card with Configure link only<\/li>\n<li>Text generation via no-repo Cloud Agents<\/li>\n<\/ul>","raw_excerpt":"AI Provider for Cursor Cloud Agents for the WordPress AI Client.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/347675","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=347675"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rafacarvalhido"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=347675"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=347675"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=347675"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=347675"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=347675"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=347675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}