[{"data":1,"prerenderedAt":485},["ShallowReactive",2],{"navigation":3,"page:\u002Fcursor":45},{"title":4,"links":5},"API reference",[6,9,12,15,18,21,24,27,30,33,36,39,42],{"title":7,"href":8},"Accounts","\u002Freference\u002Faccounts",{"title":10,"href":11},"Connect","\u002Freference\u002Fconnect",{"title":13,"href":14},"Calendars","\u002Freference\u002Fcalendars",{"title":16,"href":17},"Events","\u002Freference\u002Fevents",{"title":19,"href":20},"Availability","\u002Freference\u002Favailability",{"title":22,"href":23},"Meetings","\u002Freference\u002Fmeetings",{"title":25,"href":26},"Invitations","\u002Freference\u002Finvitations",{"title":28,"href":29},"Webhooks","\u002Freference\u002Fwebhooks",{"title":31,"href":32},"Metadata","\u002Freference\u002Fmetadata",{"title":34,"href":35},"Keys","\u002Freference\u002Fkeys",{"title":37,"href":38},"Sandbox","\u002Freference\u002Fsandbox",{"title":40,"href":41},"Usage","\u002Freference\u002Fusage",{"title":43,"href":44},"Logs","\u002Freference\u002Flogs",{"kind":46,"title":47,"description":48,"sections":49,"doc":68},"guide","Cursor","Add the Pyas MCP server to Cursor, sign in to Pyas, and let Cursor's agent set up your app, write the integration and check your sandbox while you code.",[50,53,56,59,62,65],{"id":51,"title":52},"add-pyas-to-cursor","Add Pyas to Cursor",{"id":54,"title":55},"sign-in","Sign in",{"id":57,"title":58},"use-it-while-you-code","Use it while you code",{"id":60,"title":61},"choose-what-needs-your-approval","Choose what needs your approval",{"id":63,"title":64},"live-calendars","Live calendars",{"id":66,"title":67},"disconnect","Disconnect",{"id":69,"title":47,"body":70,"description":48,"extension":476,"hero":477,"meta":478,"navigation":479,"path":480,"rawbody":481,"sections":49,"seo":482,"stem":76,"v1":483,"__hash__":484},"docs\u002Fcursor.md",{"type":71,"value":72,"toc":468},"minimark",[73,77,84,98,101,114,117,202,212,214,217,231,247,249,252,258,281,286,291,302,305,311,313,319,348,351,353,356,420,423,430,441,443,454,464],[74,75,47],"h1",{"id":76},"cursor",[78,79,80],"lead",{},[81,82,83],"p",{},"Add Pyas to Cursor, and its agent can set up your Pyas app, write the code that connects calendars, and check your sandbox while you code. You add Pyas by its address and sign in. There is nothing to install and no key to copy.",[81,85,86,87,91,92,97],{},"Start with the sandbox address, ",[88,89,90],"code",{},"https:\u002F\u002Fmcp.pyas.io\u002Fsandbox",". It works in your app's ",[93,94,96],"a",{"href":95},"\u002Fsandbox","sandbox",", on sample people, calendars and events, so nothing you try reaches a real calendar.",[99,100,52],"h2",{"id":51},[81,102,103,104,108,109,113],{},"Select ",[93,105,107],{"href":106},"cursor:\u002F\u002Fanysphere.cursor-deeplink\u002Fmcp\u002Finstall?name=pyas-sandbox&config=eyJ1cmwiOiJodHRwczovL21jcC5weWFzLmlvL3NhbmRib3gifQ%3D%3D","Add to Cursor",". Cursor opens and asks you to install ",[110,111,112],"strong",{},"pyas-sandbox",".",[81,115,116],{},"Or add it yourself:",[118,119,120,199],"ol",{},[121,122,123,124,127,128,131,132],"li",{},"Add the server to ",[88,125,126],{},"~\u002F.cursor\u002Fmcp.json"," to use it in every project, or to ",[88,129,130],{},".cursor\u002Fmcp.json"," in one project:",[133,134,139],"pre",{"className":135,"code":136,"language":137,"meta":138,"style":138},"language-json shiki shiki-themes css-variables","{\n  \"mcpServers\": {\n    \"pyas-sandbox\": { \"url\": \"https:\u002F\u002Fmcp.pyas.io\u002Fsandbox\" }\n  }\n}\n","json","",[88,140,141,150,164,187,193],{"__ignoreMap":138},[142,143,146],"span",{"class":144,"line":145},"line",1,[142,147,149],{"class":148},"sqSWz","{\n",[142,151,153,157,161],{"class":144,"line":152},2,[142,154,156],{"class":155},"sag7P","  \"mcpServers\"",[142,158,160],{"class":159},"sEEt9",":",[142,162,163],{"class":148}," {\n",[142,165,167,170,172,175,178,180,184],{"class":144,"line":166},3,[142,168,169],{"class":155},"    \"pyas-sandbox\"",[142,171,160],{"class":159},[142,173,174],{"class":148}," { ",[142,176,177],{"class":155},"\"url\"",[142,179,160],{"class":159},[142,181,183],{"class":182},"sk1Au"," \"https:\u002F\u002Fmcp.pyas.io\u002Fsandbox\"",[142,185,186],{"class":148}," }\n",[142,188,190],{"class":144,"line":189},4,[142,191,192],{"class":148},"  }\n",[142,194,196],{"class":144,"line":195},5,[142,197,198],{"class":148},"}\n",[121,200,201],{},"Save the file and restart Cursor.",[81,203,204,205,208,209,113],{},"To see the server, open ",[110,206,207],{},"Customize"," in the sidebar, then ",[110,210,211],{},"MCPs",[99,213,55],{"id":54},[81,215,216],{},"The first time Cursor connects to Pyas, your browser opens the Pyas dashboard:",[118,218,219,222,225],{},[121,220,221],{},"Sign in, or create an account.",[121,223,224],{},"Choose the app that Cursor works with.",[121,226,227,228,113],{},"Check what Cursor asks for, and select ",[110,229,230],{},"Allow",[81,232,233,234,236,237,239,240,242,243,246],{},"Go back to Cursor. Under ",[110,235,207],{},", then ",[110,238,211],{},", ",[110,241,112],{}," lists its tools. See ",[93,244,55],{"href":245},"\u002Fai-tools#sign-in"," for what each permission allows.",[99,248,58],{"id":57},[81,250,251],{},"Ask the agent in plain words, in the project you're working on:",[253,254,255],"blockquote",{},[81,256,257],{},"Set up Pyas in this app so people can connect their Google or Outlook calendar.",[81,259,260,261,264,265,268,269,272,273,276,277,280],{},"The agent checks your app's setup with ",[88,262,263],{},"setup_status",", gets the code for your stack with ",[88,266,267],{},"get_recipe",", and creates a test key with ",[88,270,271],{},"get_test_key",". It tells you where to store the key, such as ",[88,274,275],{},"PYAS_API_KEY"," in your ",[88,278,279],{},".env"," file. Recipes cover Next.js and Express, and the AI app builders.",[253,282,283],{},[81,284,285],{},"What's on Avery's calendar tomorrow?",[253,287,288],{},[81,289,290],{},"My last request to Pyas failed. Why?",[81,292,293,294,297,298,301],{},"The sandbox's sample people, such as Avery Brooks and Riley Chen, have calendars with a week of events. For a failed request, the agent looks it up with ",[88,295,296],{},"get_request"," and ",[88,299,300],{},"explain_error",", from its trace ID.",[81,303,304],{},"To leave out a tool, select its name in the tools list at the top of the chat panel.",[81,306,307,308,310],{},"Every request Cursor makes is on the ",[110,309,43],{}," page in the dashboard, marked with the tool that made it.",[99,312,61],{"id":60},[81,314,315,316,160],{},"Cursor asks you before it uses a Pyas tool. To let it use every Pyas tool in the sandbox without asking, add the server to the allowlist in ",[88,317,318],{},"~\u002F.cursor\u002Fpermissions.json",[133,320,322],{"className":135,"code":321,"language":137,"meta":138,"style":138},"{\n  \"mcpAllowlist\": [\"pyas-sandbox:*\"]\n}\n",[88,323,324,328,344],{"__ignoreMap":138},[142,325,326],{"class":144,"line":145},[142,327,149],{"class":148},[142,329,330,333,335,338,341],{"class":144,"line":152},[142,331,332],{"class":155},"  \"mcpAllowlist\"",[142,334,160],{"class":159},[142,336,337],{"class":148}," [",[142,339,340],{"class":182},"\"pyas-sandbox:*\"",[142,342,343],{"class":148},"]\n",[142,345,346],{"class":144,"line":166},[142,347,198],{"class":148},[81,349,350],{},"Don't add the live server to the allowlist. Keep being asked before the agent changes a live calendar.",[99,352,64],{"id":63},[81,354,355],{},"To work on the real calendars that people connected to your app, add a second server next to the sandbox:",[133,357,359],{"className":135,"code":358,"language":137,"meta":138,"style":138},"{\n  \"mcpServers\": {\n    \"pyas-sandbox\": { \"url\": \"https:\u002F\u002Fmcp.pyas.io\u002Fsandbox\" },\n    \"pyas-live\": { \"url\": \"https:\u002F\u002Fmcp.pyas.io\" }\n  }\n}\n",[88,360,361,365,373,393,411,415],{"__ignoreMap":138},[142,362,363],{"class":144,"line":145},[142,364,149],{"class":148},[142,366,367,369,371],{"class":144,"line":152},[142,368,156],{"class":155},[142,370,160],{"class":159},[142,372,163],{"class":148},[142,374,375,377,379,381,383,385,387,390],{"class":144,"line":166},[142,376,169],{"class":155},[142,378,160],{"class":159},[142,380,174],{"class":148},[142,382,177],{"class":155},[142,384,160],{"class":159},[142,386,183],{"class":182},[142,388,389],{"class":148}," }",[142,391,392],{"class":159},",\n",[142,394,395,398,400,402,404,406,409],{"class":144,"line":189},[142,396,397],{"class":155},"    \"pyas-live\"",[142,399,160],{"class":159},[142,401,174],{"class":148},[142,403,177],{"class":155},[142,405,160],{"class":159},[142,407,408],{"class":182}," \"https:\u002F\u002Fmcp.pyas.io\"",[142,410,186],{"class":148},[142,412,413],{"class":144,"line":195},[142,414,192],{"class":148},[142,416,418],{"class":144,"line":417},6,[142,419,198],{"class":148},[81,421,422],{},"When you sign in, choose whether Cursor may only read live calendars, or change them too.",[81,424,425,426,429],{},"Before the agent changes a live calendar, you confirm the change in Pyas, from a link that it gives you. See ",[93,427,64],{"href":428},"\u002Fai-tools#live-calendars"," for how that works and who can confirm.",[81,431,432,433,436,437,236,439,113],{},"While you work in the sandbox, turn the live server off with the switch next to ",[110,434,435],{},"pyas-live",", under ",[110,438,207],{},[110,440,211],{},[99,442,67],{"id":66},[81,444,445,446,236,448,450,451,113],{},"To remove Pyas from Cursor, remove it under ",[110,447,207],{},[110,449,211],{},", or delete its entry from ",[88,452,453],{},"mcp.json",[81,455,456,457,460,461,463],{},"To stop Cursor from Pyas's side, open your profile in the Pyas dashboard. ",[110,458,459],{},"Connected tools"," lists Cursor with when it was last used, and ",[110,462,67],{}," stops it immediately. To use it again, add it again and sign in.",[465,466,467],"style",{},"html pre.shiki code .sqSWz, html code.shiki .sqSWz{--shiki-default:var(--shiki-foreground)}html pre.shiki code .sag7P, html code.shiki .sag7P{--shiki-default:var(--shiki-token-keyword)}html pre.shiki code .sEEt9, html code.shiki .sEEt9{--shiki-default:var(--shiki-token-punctuation)}html pre.shiki code .sk1Au, html code.shiki .sk1Au{--shiki-default:var(--shiki-token-string-expression)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":138,"searchDepth":166,"depth":166,"links":469},[470,471,472,473,474,475],{"id":51,"depth":152,"text":52},{"id":54,"depth":152,"text":55},{"id":57,"depth":152,"text":58},{"id":60,"depth":152,"text":61},{"id":63,"depth":152,"text":64},{"id":66,"depth":152,"text":67},"md",false,{},true,"\u002Fcursor","---\ntitle: Cursor\ndescription: Add the Pyas MCP server to Cursor, sign in to Pyas, and let Cursor's agent set up your app, write the integration and check your sandbox while you code.\nsections:\n  - { id: add-pyas-to-cursor, title: Add Pyas to Cursor }\n  - { id: sign-in, title: Sign in }\n  - { id: use-it-while-you-code, title: Use it while you code }\n  - { id: choose-what-needs-your-approval, title: Choose what needs your approval }\n  - { id: live-calendars, title: Live calendars }\n  - { id: disconnect, title: Disconnect }\n---\n\n# Cursor\n\n::lead\nAdd Pyas to Cursor, and its agent can set up your Pyas app, write the code that connects calendars, and check your sandbox while you code. You add Pyas by its address and sign in. There is nothing to install and no key to copy.\n::\n\nStart with the sandbox address, `https:\u002F\u002Fmcp.pyas.io\u002Fsandbox`. It works in your app's [sandbox](\u002Fsandbox), on sample people, calendars and events, so nothing you try reaches a real calendar.\n\n## Add Pyas to Cursor\n\nSelect [Add to Cursor](cursor:\u002F\u002Fanysphere.cursor-deeplink\u002Fmcp\u002Finstall?name=pyas-sandbox&config=eyJ1cmwiOiJodHRwczovL21jcC5weWFzLmlvL3NhbmRib3gifQ%3D%3D). Cursor opens and asks you to install **pyas-sandbox**.\n\nOr add it yourself:\n\n1. Add the server to `~\u002F.cursor\u002Fmcp.json` to use it in every project, or to `.cursor\u002Fmcp.json` in one project:\n\n   ```json\n   {\n     \"mcpServers\": {\n       \"pyas-sandbox\": { \"url\": \"https:\u002F\u002Fmcp.pyas.io\u002Fsandbox\" }\n     }\n   }\n   ```\n\n2. Save the file and restart Cursor.\n\nTo see the server, open **Customize** in the sidebar, then **MCPs**.\n\n## Sign in\n\nThe first time Cursor connects to Pyas, your browser opens the Pyas dashboard:\n\n1. Sign in, or create an account.\n2. Choose the app that Cursor works with.\n3. Check what Cursor asks for, and select **Allow**.\n\nGo back to Cursor. Under **Customize**, then **MCPs**, **pyas-sandbox** lists its tools. See [Sign in](\u002Fai-tools#sign-in) for what each permission allows.\n\n## Use it while you code\n\nAsk the agent in plain words, in the project you're working on:\n\n> Set up Pyas in this app so people can connect their Google or Outlook calendar.\n\nThe agent checks your app's setup with `setup_status`, gets the code for your stack with `get_recipe`, and creates a test key with `get_test_key`. It tells you where to store the key, such as `PYAS_API_KEY` in your `.env` file. Recipes cover Next.js and Express, and the AI app builders.\n\n> What's on Avery's calendar tomorrow?\n\n> My last request to Pyas failed. Why?\n\nThe sandbox's sample people, such as Avery Brooks and Riley Chen, have calendars with a week of events. For a failed request, the agent looks it up with `get_request` and `explain_error`, from its trace ID.\n\nTo leave out a tool, select its name in the tools list at the top of the chat panel.\n\nEvery request Cursor makes is on the **Logs** page in the dashboard, marked with the tool that made it.\n\n## Choose what needs your approval\n\nCursor asks you before it uses a Pyas tool. To let it use every Pyas tool in the sandbox without asking, add the server to the allowlist in `~\u002F.cursor\u002Fpermissions.json`:\n\n```json\n{\n  \"mcpAllowlist\": [\"pyas-sandbox:*\"]\n}\n```\n\nDon't add the live server to the allowlist. Keep being asked before the agent changes a live calendar.\n\n## Live calendars\n\nTo work on the real calendars that people connected to your app, add a second server next to the sandbox:\n\n```json\n{\n  \"mcpServers\": {\n    \"pyas-sandbox\": { \"url\": \"https:\u002F\u002Fmcp.pyas.io\u002Fsandbox\" },\n    \"pyas-live\": { \"url\": \"https:\u002F\u002Fmcp.pyas.io\" }\n  }\n}\n```\n\nWhen you sign in, choose whether Cursor may only read live calendars, or change them too.\n\nBefore the agent changes a live calendar, you confirm the change in Pyas, from a link that it gives you. See [Live calendars](\u002Fai-tools#live-calendars) for how that works and who can confirm.\n\nWhile you work in the sandbox, turn the live server off with the switch next to **pyas-live**, under **Customize**, then **MCPs**.\n\n## Disconnect\n\nTo remove Pyas from Cursor, remove it under **Customize**, then **MCPs**, or delete its entry from `mcp.json`.\n\nTo stop Cursor from Pyas's side, open your profile in the Pyas dashboard. **Connected tools** lists Cursor with when it was last used, and **Disconnect** stops it immediately. To use it again, add it again and sign in.\n",{"title":47,"description":48},null,"qASUmo5wXyK77sf53TVPyjtEbah6R18DoJ5RTZufPE8",1794697270974]