Skip to main content
AllMCPs
BrowseBestCategoriesStackCompareToolsGuidesBlog Log in Submit MCP

Stay in the loop

Get new MCP servers and top picks in your inbox.

AllMCPs

The open directory for discovering and installing Model Context Protocol servers.

Explore

  • Browse servers
  • Best MCP servers
  • Categories
  • MCP clients
  • Agent prompts
  • Stack Builder
  • Compare servers
  • Tags index
  • Submit a server
  • Pricing

Learn

  • Guides hub
  • What is MCP?
  • Install guide
  • Troubleshooting
  • Security
  • Blog
  • Blog RSS

Tools

  • All tools
  • Config generator
  • Config validator
  • MCP playground
  • OpenAPI β†’ MCP
  • Badge generator

For agents

  • API docs
  • Trust & traffic
  • llms.txt β†— (opens in a new tab)
  • Catalog JSON β†— (opens in a new tab)
  • Remote MCP β†— (opens in a new tab)

Company

  • About
  • Contact
  • X (@AllMCPs) β†— (opens in a new tab)
  • GitHub β†— (opens in a new tab)
  • Terms
  • Privacy
AllMCPs VerifiedAllMCPs VerifiedFeatured on Nick LaunchesFeatured on Nick LaunchesLaunch Llama NewsletterLaunch Llama NewsletterVerified DR - allmcps.comVerified DR - allmcps.comFeatured on SaaSGrowFeatured on SaaSGrowFeatured on Twelve ToolsFeatured on Twelve ToolsFeatured on Saaspa.geFeatured on Saaspa.geFeatured on Findly.toolsFeatured on Findly.toolsFeatured on Startup FameFeatured on Startup FameFeatured on LaunchKiwiFeatured on LaunchKiwiFeatured on ScrollLaunchFeatured on ScrollLaunchFeatured on DailyPingsFeatured on DailyPingsFazier badgeFazier badgeFeatured on NewTool.siteFeatured on NewTool.siteFeatured on saasfame.comFeatured on saasfame.comDR Checker - Domain RatingDR Checker - Domain RatingListed on Turbo0Listed on Turbo0Launched on LaunchBoard - Product Launch PlatformLaunched on LaunchBoard - Product Launch PlatformList on SimilarlabsList on Similarlabshttps://codetrendy.comhttps://codetrendy.comListed on DevTool.ioFeatured on BuildlistFeatured on BuildlistAllMCPs VerifiedAllMCPs VerifiedFeatured on Nick LaunchesFeatured on Nick LaunchesLaunch Llama NewsletterLaunch Llama NewsletterVerified DR - allmcps.comVerified DR - allmcps.comFeatured on SaaSGrowFeatured on SaaSGrowFeatured on Twelve ToolsFeatured on Twelve ToolsFeatured on Saaspa.geFeatured on Saaspa.geFeatured on Findly.toolsFeatured on Findly.toolsFeatured on Startup FameFeatured on Startup FameFeatured on LaunchKiwiFeatured on LaunchKiwiFeatured on ScrollLaunchFeatured on ScrollLaunchFeatured on DailyPingsFeatured on DailyPingsFazier badgeFazier badgeFeatured on NewTool.siteFeatured on NewTool.siteFeatured on saasfame.comFeatured on saasfame.comDR Checker - Domain RatingDR Checker - Domain RatingListed on Turbo0Listed on Turbo0Launched on LaunchBoard - Product Launch PlatformLaunched on LaunchBoard - Product Launch PlatformList on SimilarlabsList on Similarlabshttps://codetrendy.comhttps://codetrendy.comListed on DevTool.ioFeatured on BuildlistFeatured on Buildlist
Β© 2026 Jackalope Digital LLC. All rights reserved.
  1. Home
  2. πŸ—„οΈ Databases
  3. Mcp
M
Health: Not checked yetWe have not completed a health check for this listing yet.Last checked 8/11/2026, 12:03:01 AM

Mcp

Enrichment pendingWe haven’t run our AI enrichment pass on this listing yet, so the overview, use cases, and FAQ below may be sparse or missing. We work through the catalog over time β€” check back soon.
View RepositoryVisit Website

Provision Postgres databases + webhooks from AI coding agents in one HTTP call.

Quick Install

Automated & IDE Setup

Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β€” or use 1-click editor setup below.

Add to CursorAdd to VS Code
Manual Client & Custom JSON ConfigExpand JSON β–Ύ

Install Config Generator

Choose your client
claude_desktop_config.json
{
  "mcpServers": {
    "mcp-197": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-197"
      ]
    }
  }
}

πŸ’‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)

Install Directory Badge Claim listing AlternativesπŸ—„οΈ More in Databases

Documentation Overview

instanode-mcp

MCP server for instanode.dev. Lets AI coding agents (Claude Code, Cursor, Windsurf, Continue, etc.) provision the full bundle of ephemeral developer infrastructure over HTTPS β€” no Docker, no signup required for the free anonymous tier.

One tool call per resource type, each returning a drop-in connection string:

  • Postgres (create_postgres) β†’ postgres://... with pgvector pre-installed
  • Redis (create_cache) β†’ redis://... with ACL-scoped user + namespace
  • MongoDB (create_nosql) β†’ mongodb://... with role scoped to the DB
  • NATS JetStream (create_queue) β†’ nats://... with scoped subject namespace
  • S3-compatible storage (create_storage) β†’ endpoint + keys + prefix (backed by DigitalOcean Spaces)
  • Webhook receiver (create_webhook) β†’ public URL that stores every inbound request
  • Container deployment (create_deploy) β†’ upload a base64 gzip tarball (Dockerfile + source), get back a public URL in ~30s. Bind any of the resources above by passing their tokens as resource_bindings β€” the API resolves tokens to connection URLs server-side.
  • Multi-service stack (create_stack) β†’ declare 1..N services in an instant.yaml manifest, ship them as a bundle in a single MCP call. Anonymous callers get a 6h-TTL stack with a live URL on *.deployment.instanode.dev β€” no card required. Cross-service refs (service://<name>) resolve cluster-internally at deploy time. Poll status with get_stack.

Every anonymous resource auto-expires in 24h. The provision response carries a note and upgrade field β€” the MCP server surfaces both verbatim so the agent can show the user the exact CTA + claim URL needed to keep the resource permanently. Run claim_resource on the returned upgrade_jwt to get the dashboard claim URL.

Install

Claude Code

Terminal
claude mcp add instanode -- npx -y instanode-mcp@latest

To authenticate (unlock paid-tier limits and the account-management tools):

Terminal
claude mcp add instanode \
  --env INSTANODE_TOKEN=<paste from https://instanode.dev/dashboard> \
  -- npx -y instanode-mcp@latest

Cursor

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

config.json
{
  "mcpServers": {
    "instanode": {
      "command": "npx",
      "args": ["-y", "instanode-mcp@latest"],
      "env": {
        "INSTANODE_TOKEN": "<optional β€” paste from dashboard for paid tier>"
      }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

config.json
{
  "mcpServers": {
    "instanode": {
      "command": "npx",
      "args": ["-y", "instanode-mcp@latest"],
      "env": {
        "INSTANODE_TOKEN": "<optional>"
      }
    }
  }
}

Continue.dev

Add to your ~/.continue/config.yaml:

yaml
mcpServers:
  - name: instanode
    command: npx
    args: ["-y", "instanode-mcp@latest"]
    env:
      INSTANODE_TOKEN: "<optional>"

For a drop-in CLAUDE.md / .cursorrules that tells the agent exactly when to reach for this MCP, see https://instanode.dev/agent.html.

Environment

VariableRequiredDefaultPurpose
INSTANODE_TOKENNoβ€”Bearer JWT minted at https://instanode.dev/dashboard. Required for list_resources, claim_token, delete_resource, get_api_token, and all deploy tools (create_deploy, list_deployments, get_deployment, redeploy, delete_deployment). Unlocks paid-tier limits on every create_*.
INSTANODE_API_URLNohttps://api.instanode.devOverride the API base URL. Only set this for local development against a k3s cluster.
INSTANODE_DASHBOARD_URLNohttps://instanode.devOverride the dashboard host that claim_resource builds claim URLs against. Only set this for staging.

Tools

ToolDescription
create_postgresPOST /db/new β€” Provision a Postgres database (pgvector included). Returns connection_url + the note/upgrade claim URL. name required.
create_vectorPOST /vector/new β€” Provision a pgvector-enabled Postgres database (embedding store). Returns connection_url + extension/dimensions + note/upgrade. name required; optional dimensions is a documentation hint.
create_cachePOST /cache/new β€” Provision a Redis cache (ACL-scoped user + namespace). Returns connection_url + note/upgrade. name required.
create_nosqlPOST /nosql/new β€” Provision a MongoDB database (per-resource user + DB-scoped role). Returns connection_url + note/upgrade. name required.
create_queuePOST /queue/new β€” Provision a NATS JetStream queue (scoped subject namespace). Returns connection_url + note/upgrade. name required.
create_storagePOST /storage/new β€” Provision an S3-compatible bucket prefix (DigitalOcean Spaces). Returns endpoint, access keys, prefix + note/upgrade. name required.
create_webhookPOST /webhook/new β€” Provision an inbound webhook receiver URL. Returns receive_url + note/upgrade. name required.
create_deployPOST /deploy/new β€” Upload a base64 gzip tarball (with Dockerfile) and deploy a container. Returns deploy_id, status, url, build_logs_url. name required. Pass redeploy: true (with the SAME name) to update an existing deployment IN PLACE (same app_id + URL). Requires INSTANODE_TOKEN.
create_stackPOST /stacks/new β€” Multi-service bundle. Upload an instant.yaml manifest plus one base64 gzip tarball per service; returns stack_id, per-service URLs, and the 6h-TTL claim block on the anonymous tier. Anonymous-friendly (the wedge). name, manifest, service_tarballs required.
get_stackGET /stacks/{stack_id} β€” Poll a stack's per-service status + URLs. Anonymous-friendly. stack_id required.
list_deploymentsGET /api/v1/deployments β€” List all deployments on the caller's team. Requires INSTANODE_TOKEN.
get_deploymentGET /api/v1/deployments/:id β€” Fetch one deployment (poll until status="running"). Requires INSTANODE_TOKEN.
get_deployment_eventsGET /api/v1/deployments/:id/events β€” Read the failure-timeline autopsy for a deployment (kind/reason/exit_code/event/last_lines/hint/created_at, newest first) so an agent can self-correct a broken Dockerfile. Optional limit. Requires INSTANODE_TOKEN.
redeployPOST /deploy/:id/redeploy β€” Push updated code to an existing deployment BY ID. Same URL, new build. Requires tarball_base64 (same shape as create_deploy) β€” the api never reuses the original tarball. For the more common "update by name" path prefer create_deploy({ name, redeploy: true, tarball_base64 }). Requires INSTANODE_TOKEN.
delete_deploymentDELETE /deploy/:id β€” Tear down a running deployment. Irreversible. Requires INSTANODE_TOKEN.
claim_resourceHelper β€” turn an upgrade_jwt from any create_* response into the dashboard claim URL the user should click. No API call. No auth required.
claim_tokenPOST /claim β€” Programmatic claim: attach an anonymous resource to the authenticated account using its upgrade_jwt + email. No auth required.
list_resourcesGET /api/v1/resources β€” List resources on the caller's account. Requires INSTANODE_TOKEN.
delete_resourceDELETE /api/v1/resources/{token} β€” Hard-delete a resource you own. Paid tier only. Requires INSTANODE_TOKEN.
get_api_tokenPOST /api/v1/auth/api-keys β€” Mint a fresh bearer Personal Access Token (PAT). Requires an existing user-session INSTANODE_TOKEN (PATs cannot mint other PATs β€” the API returns 403 in that case).
get_capabilitiesGET /api/v1/capabilities β€” Read the live per-tier capability matrix (storage / connection / resource-count / deployment caps, pricing, backup + RPO/RTO promises) in upgrade order so an agent can plan a provision before a call 402s. Auth optional (public discovery surface).
set_vault_keyPUT /api/v1/vault/{env}/{key} β€” Write a secret to the team vault (always a new version). Reference it from a deploy as vault://{env}/{key} in env_vars; the API decrypts it at deploy time. Vault is paid (Hobby+ = 20 entries, Pro/Team = unlimited; Hobby/Pro restrict env to production). Requires INSTANODE_TOKEN.
rotate_vault_keyPOST /api/v1/vault/{env}/{key}/rotate β€” Rotate a vault secret's value (new version, recorded under a distinct audit action). Redeploy referencing apps to apply. Requires INSTANODE_TOKEN.
update_deploy_envPATCH /deploy/{id}/env β€” Merge env vars into an existing deployment (incoming wins; values may be vault://env/KEY refs). Returns the merged map with secrets redacted. Redeploy to apply. Requires INSTANODE_TOKEN.
update_stack_envPATCH /stacks/{slug}/env β€” Merge env vars into an existing stack (row-locked; an empty-string value deletes a key). Redeploy the stack to apply. Requires INSTANODE_TOKEN.
presign_storagePOST /storage/{token}/presign β€” Mint a short-lived (≀1h) presigned S3 URL (GET/PUT/HEAD) scoped to a storage prefix. Auth is the storage token in the path β€” works for anonymous-tier storage. DELETE is not offered (a leaked URL must not wipe a prefix).
pause_resourcePOST /api/v1/resources/{id}/pause β€” Suspend a resource without deleting it (storage + connection URL preserved; new connections refused). Pro tier or higher. Requires INSTANODE_TOKEN.
resume_resourcePOST /api/v1/resources/{id}/resume β€” Un-pause a resource (same connection URL keeps working). Pro tier or higher. Requires INSTANODE_TOKEN.
rotate_credentialsPOST /api/v1/resources/{id}/rotate-credentials β€” Rotate a resource's password; returns the NEW connection_url in plaintext (host + DB unchanged). Locks out a leaked old URL. Requires INSTANODE_TOKEN.
wake_deploymentPOST /deploy/{id}/wake β€” Explicitly wake a scaled-to-zero deployment (scales to 1 replica; cold-start before serving). Flag-gated on the platform: returns 501 scale_to_zero_disabled when the feature is off. Requires INSTANODE_TOKEN.

Container deployment (create_deploy)

Deploying is a single multipart/form-data POST with a base64-encoded gzip tarball of the project (Dockerfile + source). The MCP tool handles the encoding plumbing; the agent's job is just to construct the tarball.

Building the tarball (any language):

server.ts
import base64, subprocess
tar = subprocess.check_output(["tar", "czf", "-", "-C", project_dir, "."])
tarball_base64 = base64.b64encode(tar).decode()
server.ts
import { execFileSync } from "node:child_process";
const tar = execFileSync("tar", ["czf", "-", "-C", projectDir, "."]);
const tarball_base64 = tar.toString("base64");

Cap: 50 MB after decode. Honor .dockerignore β€” only ship what docker build needs. The name field is required (1–64 chars, letters/numbers/spaces/dashes) β€” it's the human-readable label shown on the dashboard.

Binding provisioned resources:

Provision the resources first with create_postgres / create_cache / etc. to get their tokens (UUIDs), then pass the tokens as resource_bindings:

config.json
{
  "tarball_base64": "...",
  "name": "my-app",
  "port": 8080,
  "resource_bindings": {
    "DATABASE_URL": "<token from create_postgres>",
    "REDIS_URL":    "<token from create_cache>"
  }
}

The agent passes resource tokens (not connection URLs); the API resolves each token to its connection URL server-side at deploy time. The MCP server never pre-resolves tokens β€” pre-resolving would round-trip every binding through GET /credentials and embed raw secrets into the tool params, which the agent host may log.

Polling:

create_deploy returns status="building" immediately. Poll get_deployment({ id: deploy_id }) every few seconds until status flips to "running" (typical: ~30s). At that point the url field is the live URL.

Updating an existing deployment (same URL, new build)

To ship v2 of an app you already deployed without changing the URL or app_id, call create_deploy again with the same name plus redeploy: true:

config.json
{
  "tarball_base64": "...",
  "name": "my-app",
  "redeploy": true
}

The api finds the existing deployment by (team_id, name) and updates it in place β€” same app_id, same *.deployment.instanode.dev URL, status flips back to building while the new image rolls out.

Without redeploy: true, calling create_deploy with a name you've used before mints a new app_id and a new URL (the legacy behaviour). This is the trap that caused the AGENT-UX issue where agents ended up with two live deployments + two URLs for the same app.

The standalone redeploy tool (by id, not name) still works and also requires a tarball_base64 β€” the api never reuses the original tarball. Prefer the create_deploy({ name, redeploy: true }) path when you have the name; use redeploy({ id, tarball_base64 }) when you only have the deploy id.

Private deploys

Set private: true and pass allowed_ips to restrict access to specific IPs or CIDR blocks at the Ingress. Useful when the agent is asked to deploy a CRM, internal dashboard, or staging app that should only be reachable by the user.

Pro tier or higher required. Hobby callers will see HTTP 402 with an agent_action field β€” the MCP server surfaces the upgrade URL so the agent can prompt the user to upgrade.

Example prompt (paste into Claude Code):

"Deploy my CRM as a private app, only accessible from 1.2.3.4 and my office subnet 10.0.0.0/8"

The agent will then call:

config.json
{
  "tarball_base64": "...",
  "name": "my-crm",
  "private": true,
  "allowed_ips": ["1.2.3.4", "10.0.0.0/8"]
}

get_deployment and list_deployments surface private + allowed_ips back to the agent so it can confirm the policy to the user. To turn a private deploy public, redeploy without the flags.

How anonymous β†’ claimed works

Every create_* tool returns three fields the agent should treat as load-bearing:

  • token β€” the resource UUID (used for claim_token and delete_resource).
  • note β€” a one-sentence human-readable CTA, already mentions the upgrade URL.
  • upgrade β€” the full claim URL (https://instanode.dev/start?t=<jwt>). The user clicks it, signs in with GitHub/Google or a magic link, and the resource is attached to their account.

upgrade_jwt is also returned for callers that want to build their own UI around the claim flow. The claim_resource tool accepts that JWT and returns the same dashboard URL β€” useful if the agent wants to re-surface the claim URL later in the conversation after the original response has scrolled out of context.

Example agent interactions

1. "I need a Postgres for this project"

You: Claude, I need a Postgres database for this project.

Claude: calls create_postgres({ name: "my-side-project" })

Returns a connection_url like postgres://usr_a1b2:...@pg.instanode.dev:5432/db_a1b2?sslmode=require, plus note: "Works for 24h free. Claim to keep β€” from $9/mo: https://instanode.dev/start?t=...".

Claude then: writes DATABASE_URL=... to .env, adds .env to .gitignore, runs the migrations, and shows the user the claim URL verbatim so they know how to keep the database past 24h.

2. "Spin up a Redis cache for rate limiting"

You: Add a Redis cache so I can rate-limit my API.

Claude: calls create_cache({ name: "api-ratelimit" })

Returns a connection_url like redis://usr_b2c3:...@redis.instanode.dev:6379/0.

3. "Set up a webhook to catch Stripe events"

You: Give me a webhook URL I can point Stripe at.

Claude: calls create_webhook({ name: "stripe-sandbox" })

Returns a receive_url that captures every request. curl $receive_url pulls back the stored log.

4. "Object storage for user uploads"

You: I need S3-compatible storage for uploaded avatars.

Claude: calls create_storage({ name: "user-avatars" })

Returns endpoint, access key, secret key, and prefix. Claude wires the AWS SDK with the returned credentials.

5. "Make last night's database permanent"

You: I want to keep the database you made yesterday past 24h.

Claude (no INSTANODE_TOKEN): calls claim_resource({ upgrade_jwt: "<the upgrade_jwt from yesterday's response>" }) β†’ shows you the dashboard claim URL. You click it, sign in, the resource is attached.

Claude (with INSTANODE_TOKEN): calls claim_token({ token: "a1b2c3d4-..." }) β†’ resource is now linked to the authenticated account, no browser round-trip needed.

Authentication

The anonymous tier works without any setup. To unlock paid limits, permanent resources, and the account-management tools (list_resources, delete_resource, claim_token, get_api_token):

  1. Sign up at https://instanode.dev with GitHub.
  2. Visit the dashboard and copy your bearer token.
  3. Set it as INSTANODE_TOKEN in the MCP server's env block (see examples above).

Rotate any time by calling get_api_token, which mints a fresh Personal Access Token via POST /api/v1/auth/api-keys. PATs are revocation-based (not time-bound). NOTE: PATs cannot mint other PATs β€” get_api_token requires a user-session token (sign in via the dashboard), not an existing PAT, otherwise the API returns 403.

Development

Terminal
npm install
npm run build
# Integration test (optional β€” requires a running instanode.dev server.
# For local k8s, port-forward first: kubectl port-forward -n instant svc/instant-api 8080:8080):
INSTANODE_API_URL=http://localhost:8080 npm test

License

MIT β€” (c) instanode.dev

Related MCP Servers

View all in Databases View all alternatives
  • AllMCPs Server logoAllMCPs Server
    β˜… Featured

    The official MCP server for AllMCPs.com - submit and manage tools directly from your AI. The open directory for MCP servers. Connect Claude, Cursor, Windsurf, and AI agents to databases, tools, files, and APIs. Explore 3,181+ servers. AllMCPs is the premier, open directory for discovering, evaluating, and installing Model Context Protocol (MCP) servers to equip AI agents and LLMs with real-world superpowers.

    πŸ—„οΈ Databases7 views
    Compare vs AllMCPs Server β†’
  • Genai Toolbox logoGenai Toolbox

    Open source MCP server specializing in easy, fast, and secure tools for Databases.

    πŸ—„οΈ Databases3 views
    Compare vs Genai Toolbox β†’
  • Airtable Mcp Server logoAirtable Mcp Server

    Airtable database integration with schema inspection, read and write capabilities

    πŸ—„οΈ Databases2 views
    Compare vs Airtable Mcp Server β†’
  • R
    RE Call MCP Memory Server

    Trustworthy Postgres plus pgvector memory for AI agents.

    πŸ—„οΈ Databases0 views
    Compare vs RE Call MCP Memory Server β†’

Frequently Asked Questions about Mcp

Add the following block to your claude_desktop_config.json under mcpServers: "mcpServers": { "mcp": { "command": "npx", "args": ["-y", "mcp"] } }

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewMcp AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/mcp-197?style=directory)](https://allmcps.com/mcp/mcp-197)
HTML Embed
<a href="https://allmcps.com/mcp/mcp-197"><img src="https://allmcps.com/api/badge/mcp-197?style=directory" alt="Mcp on AllMCPs" /></a>

Technical Specs & Signals

CategoryπŸ—„οΈDatabases
More technical detailsExpand β–Ύ
TransportSTDIO
RuntimeNode.js
Views0
Unique ViewsTotal visits recorded for this listing page on AllMCPs.
Installs0
Installs & Copy ActionsTotal times users copied install commands or configuration snippets for this server.
npm downloads9,111/mo
Monthly npm DownloadsAverage monthly package installs recorded from npm registry statistics.
32Quality signal: Emerging Β· 32/100How this signal is calculated β–Ύ
Server availabilityNot measured

Not scored for repo-hosted servers β€” we can't reach the running server, only its GitHub page. Hosted MCP endpoints are health-checked live.

Verified ownership8/20
Documentation & tools11/30
Adoption & activity5/15
Community engagement0/10

A guidance signal from public completeness & health data β€” not a user rating. New listings start lower and rise as they add docs, get verified, and grow adoption. Signals we can't observe for a listing are skipped, not counted against it.

β˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge.

Free dofollow backlink: after claiming, verify your product site and place a dofollow AllMCPs badge β€” we recheck it stays live.

Claim & get free dofollow

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.

Explore more

More in πŸ—„οΈ Databases β†’Best MCP servers for Databases β†’Alternatives to Mcp β†’Install in Claude DesktopInstall in CursorInstall in VS Code