Overview
The Perplexity Computer MCP Server connects AI assistants to Perplexity Computer, a general-purpose AI agent that can complete virtually any task on your behalf. Through the Model Context Protocol, your MCP client can delegate complex, multi-step work to Computer and receive structured results.This integration is separate from the Perplexity API MCP Server, which is focused on Perplexity’s Search and Completion APIs.
- Search and browse the web for real-time information, including login-gated pages
- Write and execute code in an interactive Linux sandbox with Python, Node, and standard Unix tools
- Create documents and media including PDFs, slide decks, spreadsheets, images, and videos
- Read and send emails via Gmail and Outlook, and schedule calendar events
- Manage tasks across GitHub, Linear, Jira, Asana, Slack, Notion, and more
- Analyze data from Snowflake, Databricks, Google Sheets, Salesforce, and other sources
- Build and deploy websites to a live public URL in minutes
- Connect to 400+ services through a managed connector framework with one-click OAuth
Authentication
The Computer MCP Server authenticates users via OAuth 2.0 using your Perplexity account. No API key is required. On first use, compatible MCP clients open a browser window to complete the authorization flow automatically.Computer usage is billed against your Perplexity account credits. If your balance is insufficient, Computer returns
insufficient_credits with a link to manage billing.Installation
1
Step 1: Install the server
Add the Computer MCP server to your client.
- Claude Code
- Codex
- Cursor
- VS Code
- Windsurf
- Claude Desktop
- Other Clients
2
Step 2: Authenticate with Perplexity Computer
After installation, you will be asked to authenticate with your Perplexity account, and will be directed to a browser window to complete the OAuth flow.

3
Step 3: Start using the Computer MCP
Once authenticated, you’re ready to start delegating tasks to Perplexity Computer through your MCP client.Run a short flow to test the connection and see Computer in action:Then follow up in the same conversation:
Conversation Threading
Computer remembers the context from the first message and builds on it. To keep follow-up prompts in the same workflow, your MCP client must pass thethread_id from the previous response.
The first call creates a new thread and returns a thread_id. Reuse that thread_id on later calls to continue the same session.
auth_required event. After you sign in, notify_connected tells Computer, and the same request continues on the same thread:
Status and Progress Updates
Computer tasks can take several minutes when they involve browsing, connector authentication, code execution, or file generation. Without MCP Tasks, the tool call waits up to two minutes for a final state or a checkpoint that needs action. If Computer is still working after that, the call returns atimeout event and the task keeps running.
Use task_status for the current Computer status and event for the tool call outcome. The response also includes the thread_id for follow-up calls:
interactive object:
thread_id:
The Computer MCP server sends status updates as MCP progress notifications while a task runs. Your client must include a progress token and support progress notifications to display them. These updates are task statuses rather than token-by-token response streaming.
timeout, Computer has not reached a checkpoint yet and is still working. Keep the thread_id and call read_thread with it to check the task’s status, read new messages, and find any questions or confirmations waiting for an answer. Don’t call call_perplexity_computer again just to check status: that sends a new message to the task.
Clients that support MCP Tasks can run the whole request as one task instead, with no two-minute limit. See MCP Tasks.
MCP Tasks
Clients that support the MCP Tasks extension (io.modelcontextprotocol/tasks, protocol 2026-07-28) can follow a Computer request as one task. The task covers the work, questions, approvals, sign-ins, and final answer. Use tasks/get to check progress and tasks/update to answer input requests.
Start a task
Declare the extension in the capabilities attached to each request, including task methods. Include this_meta object in params, or configure your MCP SDK to supply it:
call_perplexity_computer as usual. When Computer accepts a new message, the call returns a task:
tasks/get, and tasks/cancel return the thread ID in _meta["ai.perplexity/threadId"]. Save this value for tools that require thread_id, including cancel_task before completion. Do not parse the task ID or Stop URL to obtain it.
Call tasks/get with params.taskId set to the returned taskId. Wait for the returned pollIntervalMs between polls. Save the exact task ID without parsing it. After a disconnect, authenticate again and continue polling the same ID. A disconnect does not stop Computer.
tasks/get returns resultType: "complete" because the polling request has finished. Use its status field to determine whether Computer has finished. When status is completed, the same response includes the final tool result in result. There is no separate tasks/result call.
To send a follow-up, call call_perplexity_computer with the saved thread ID. The completed task also includes thread_id in result.structuredContent. Each new message starts a new task. Answers and sign-ins continue the existing task.
Task status
The result of a completed task remains available after a follow-up starts another task on the thread.
Status line and steps
While a task isworking or input_required, statusMessage describes the current step, scheduled wake time, or thread status.
tasks/get also lists the request’s steps in _meta["ai.perplexity/steps"], oldest first, up to the last 20. Each step has the same fields as the steps in read_thread:
status is working, input_required, completed, failed, or cancelled.
Answer questions and approvals
When the task isinput_required, inputRequests contains elicitation/create requests. Use each request’s params.mode to choose between a form and a URL. For forms, build the fields from params.requestedSchema. Answer with tasks/update, using the exact keys from inputRequests:
For example, if a form requests a string field named
q1, send its value under that name:
tasks/update returns an acknowledgement, not the final answer. Continue polling the same task ID after an update.
For URL requests, accept does not complete the action. The user must finish on the linked page. For approvals, cancel leaves the approval pending. These input responses do not stop Computer.
Cancel a task
tasks/cancel acknowledges the request but does not stop Computer or change its saved status. Its response includes _meta["ai.perplexity/stopUrl"], also available from task creation and tasks/get.
To stop Computer, open that URL and select Stop, or call cancel_task with thread_id set to _meta["ai.perplexity/threadId"]. Opening the URL alone does not stop work. Both actions target the thread’s current work, including work paused for a question or approval. They do not target a historical task ID. Continue polling to confirm that the current task reports cancelled.
File Uploads
Computer can work on files you provide. To attach a file to a task, request a presigned S3 envelope withcreate_attachment_upload, upload the bytes directly to S3, and pass the returned URL in attachment_urls on your next tool call. The MCP server never sees the file contents, so uploads scale to large binaries without going through the worker.
Each attachment can be up to 200 MB on paid plans, or 25 MB on the Free plan. Plans also limit how many files you can attach per day or week. When a limit is reached, create_attachment_upload returns an error.
1
Step 1: Request an upload envelope
Call
create_attachment_upload with the file’s filename, mime_type, and size_bytes. The server returns a presigned S3 POST you can use for the next few minutes.2
Step 2: POST the bytes to S3
Send an unauthenticated S3 returns
multipart/form-data POST to upload_url. Include every key from upload_fields as a form field, then add the file under a file part.204 No Content on success. The file is now reachable at attachment_url.3
Step 3: Reference the file in a task
Pass the
attachment_url to any task tool via the attachment_urls array. You can attach files to a new task or to a follow-up on an existing thread.create_attachment_upload
Request a presigned S3 POST for a single file. Returns an envelope your client uses to upload bytes directly to S3.
Returns:
Choosing a Mode or Model
If you don’t choose, Computer uses its default settings for your account. You can instead pick a mode, or a specific model and effort, when you callcall_perplexity_computer.
Discover your options
Callmodels_list to see what you can choose. It takes no parameters and only returns options your account is allowed to use, based on your plan, region, and organization policy.
Pick a mode or a model
Pass eithermode, or model with an optional effort, to call_perplexity_computer:
modeandmodelcan’t be used together.effortrequiresmodel. If you passmodelwithouteffort, Computer uses that model’sdefault_effort.- Use values returned by
models_list. Values that aren’t available to your account are rejected.
fast field is true in models_list.
Follow-ups. On a follow-up with a thread_id, passing mode or model switches the thread to the new settings. If you leave them out, the thread keeps its current settings.
Capabilities
Browser Control
Computer includes a full cloud browser for tasks that go beyond search. When a task requires interacting with a website, filling forms, or accessing login-gated content, Computer launches a browser session automatically.Code Execution
Computer runs code in a sandboxed Linux VM with a persistent file workspace. Python, Node.js, ffmpeg, and standard Unix tools are pre-installed, and additional packages can be installed on the fly.Connected Services
Computer connects to 400+ external services through a managed connector framework. Users authenticate once via OAuth, and Computer uses tokens securely to read data, take actions, and search across services.
When a task requires a service that isn’t connected yet, Computer provides an OAuth link. Authenticate in your browser and the connector becomes available immediately.
Available Tools
call_perplexity_computer
Send a message to Perplexity Computer to start or continue any task. This is the primary tool you’ll use for all interactions.Best for: Starting new tasks, sending follow-up instructions, and resuming paused conversations.
answer_question
Relays answers when Computer asks for more information. Clients that support MCP elicitation can handle this within the active call.Triggered by:
ask_user_question events.confirm_action_approve / deny
Approves or denies a sensitive action like sending an email or deploying code. Clients that support MCP elicitation can handle this within the active call.Triggered by:
confirm_action events.notify_connected
Tells Computer you finished signing in to a third-party service, so the waiting request continues.Triggered by:
auth_required events.cancel_task
Stops a running Computer task.Best for: Stopping a task the user no longer wants.
read_thread
Reads a thread’s status, transcript, and any questions or sign-ins it is waiting on, without sending a message.Best for: Checking on a task after a
timeout, a dropped connection, or a sleep.models_list
Lists the modes and models you can choose for a task.Best for: Choosing a mode, model, or effort before calling
call_perplexity_computer.list_thread_assets / create_asset_download
Lists the files a thread produced and creates fresh download URLs for them.Best for: Fetching generated files after a reconnect or once an earlier link has expired.
projects_list
Lists the Projects you can access, so a conversation can start inside one.Best for: Finding the
project_uuid to pass to call_perplexity_computer.create_attachment_upload
Creates a presigned S3 upload envelope for a file you want Computer to use.Best for: Attaching files without sending their bytes through the MCP server.
call_perplexity_computer
The primary tool. Send a message to start a new task or continue an existing conversation.
Clients that declare MCP elicitation support can handle some events within the active tool call:
- Form mode:
ask_user_questionandconfirm_actionare asked as a form. Several questions are asked in one form, except when a question allows multiple choices or attachments, or when other prompts arrived at the same time. If the result also had files or sources, the call returns right after your answer withtask_status: "working"and those files. Useread_threadto follow the rest of the task. MCP Tasks clients get these throughinputRequestsinstead. - URL mode: for
auth_required,interaction_required, andinsufficient_creditsduring a task, the client is asked to open the Perplexity page where you finish that step. The call then returns the usual result. MCP Tasks clients get these throughinputRequestsinstead.
confirm_action_deny. If your client doesn’t show the form, or you decline a question or cancel a form, the call returns the event. Use the following tools to resume the task.answer_question
Relays answers when Computer returns an ask_user_question event.
confirm_action_approve
Approves a pending action from a confirm_action event.
confirm_action_deny
Denies a pending action from a confirm_action event.
notify_connected
Tells Computer you finished signing in after an auth_required event.
If the task is waiting on that sign-in, the server answers it the way the Perplexity page does, and the same request continues. The call returns right away with
task_status: "working", and message isn’t sent. Use read_thread to follow progress. If the sign-in was already answered in Perplexity, nothing new is sent. If the task is waiting on other input, such as another sign-in, the call returns task_status: "input_required" instead; use read_thread to see what it needs.
The call sends message as a new message and waits for the result, like call_perplexity_computer, when:
- the request already ended or is sleeping,
- no sign-in is waiting,
- more than one sign-in is waiting and you didn’t pass
connector, or - you passed
attachment_urls.
connector that isn’t waiting while others are, the call fails and lists the ones that are.
cancel_task
Requests cancellation of the current work in a Computer thread, including work paused for a question or approval.
Returns a
cancelled event with task_status: "cancelled". Only threads you own can be cancelled. If the cancel request itself fails, the call returns an error without task_status, because the task may still be running.
If Computer cannot read the thread state, the tool still sends a cancellation request. A paused task may remain input_required in this case. Confirm cancellation with read_thread or tasks/get, and retry if the task remains active.
The MCP protocol method tasks/cancel only acknowledges cancellation and returns a link to the thread. See Cancel a task.
read_thread
Reads an existing thread without sending a message or resuming the agent. Use it to check on a task after a timeout, a reconnect, or a sleep.
Returns:
web_state.task_status is the status of the request in progress: working, input_required, completed, failed, or cancelled. A request that is sleeping until a scheduled time shows working.
The latest entry’s steps lists up to its last 20 titled top-level steps. Each has id, title, type, status (the same five values), started_at, completed_at, and up to 5 sources (url and title) when available.
idle or an empty interaction list doesn’t prove a task is finished; use web_state.task_status instead. In interactions, steps marked WORKFLOW_COMPLETED, WORKFLOW_ERROR, or WORKFLOW_CANCELED are terminal. Check for background or scheduled work before treating a thread as complete. Only threads you own can be read.list_thread_assets
Lists durable assets from a thread you own, including generated files.
Returns an
assets array and a next_cursor. Keep paging while next_cursor is not null, even when a filtered page is empty. Each asset has:
create_asset_download
Creates a fresh HTTPS download URL for an asset in a thread you own.
Returns
asset_id, url, and expires_in_seconds.
- File download URLs are valid for up to one hour.
expires_in_secondsis the time remaining on the URL you received, which can be less than an hour. - Hosted website preview URLs last 24 hours and return
expires_in_seconds: null. - Call
create_asset_downloadagain whenever you need a new URL.
projects_list
Lists Projects you can access, 50 at a time.
Returns a
projects array and a next_cursor. Keep paging while next_cursor is not null before concluding a Project doesn’t exist. Each Project has:
Response Format
Task tools return a JSON object with the following fields.create_attachment_upload returns the upload envelope described in File Uploads instead.
The JSON is always in the first text content block. Results also carry the same object as structuredContent, except the out-of-credits result returned before a message is sent. error and access_denied results also set the MCP isError flag.
Interactive objects for account events
When Computer can’t run for the account,interactive explains why:
billing_url is present only when topping up or changing a limit would help; it’s left out for reasons like a temporary service outage.
When the reason is quota_exhausted, interactive also includes quota_reset_date, the UTC time when the quota comes back (for example 2026-11-01T00:00:00Z).
Where you run out of credits matters:
- Before a message is sent: the server checks credits before it sends any message, including follow-ups. If that check fails, nothing is sent and the result has no
thread_idortask_status. Send the message again after topping up, with the samethread_idfor a follow-up. - During a task: the thread keeps its state and
task_statusisinput_required. After topping up, continue with the samethread_id.
Events
Computer tool results include anevent field describing the outcome. For MCP Tasks, read it from result.structuredContent after completion.
Events and Computer task status
The tool result’stask_status field describes Computer’s state using this mapping:
timeout means the MCP call stopped waiting, not that the task stopped: treat it as still working and use read_thread to check on it.
A complete result whose answer is waiting on the user reports input_required.
MCP Tasks use a separate status field. A Computer failure finishes the MCP task with status: "completed" and result.isError: true. See Task status.
Links & Resources
Perplexity Computer
Learn more about Perplexity Computer, the Digital Worker that can complete any task on your behalf.
Perplexity API MCP Server
Power your agents with Perplexity’s APIs for real-time information retrieval and generation.