Secure Postman access for AI agents
Manage Postman workspaces, collections, environments, specs, mocks, and monitors, and search Postman's Learning Center, via Postman's official MCP server.
Postman is where API design, testing, and documentation live for most engineering orgs — which means an agent with Postman access can read collections and specs to answer questions, but can just as easily publish a mock server, delete a workspace, or rewrite a monitor nobody asked it to touch. Adding Postman here puts every tool call through your policies and onto the audit log, so agents can explore your API surface without quietly reshaping it.
Server URL: https://mcp.postman.com/mcp
Setup
- Navigate to Resources and click Add Resource.
- Select Postman from the catalog.
- Click the Per-org dynamic registration card. Postman is DCR-only, so this is the single option shown — and picking it installs the resource immediately.
Nothing needs registering on Postman's side, and no client ID or secret is required. Each user then authorizes their own Postman account the first time an agent calls a Postman tool; manage linked accounts in Connections.
Postman's own team, workspace, and role-based permissions still apply. The gateway never widens access beyond what the authorizing user could already do in Postman — it only narrows it.
Dynamic client registration
Postman's MCP server supports OAuth dynamic client registration, so the gateway registers a fresh OAuth client against Postman's authorization server for your org during install. No SecureAuth-shared app is involved and no app registration is needed on your side.
See Credential modes for how this compares to the other modes catalog resources use.
Available tools
Postman exposes 124 tools. They are grouped below; the resource's Overview tab shows the authoritative per-tool list under Available Tools once installed.
| Tool | Description |
|---|---|
getAuthenticatedUser | Get information about the authenticated user |
getEnabledTools | List the tools enabled for this connection — run this first if a tool seems missing |
createWorkspace / getWorkspace / getWorkspaces / updateWorkspace / deleteWorkspace | Create, read, update, or delete a workspace |
getWorkspaceGlobalVariables / updateWorkspaceGlobalVariables | Get or replace a workspace's global variables |
getWorkspaceTags / updateWorkspaceTags | Get or update a workspace's tags |
addWorkspaceToPrivateNetwork / removeWorkspaceFromPrivateNetwork | Publish a workspace to, or remove it from, your team's Private API Network |
listPrivateNetworkWorkspaces / listPrivateNetworkAddRequests | List workspaces on the Private API Network, or pending add requests |
respondPrivateNetworkAddRequest | Approve or reject a request to add a workspace to the Private API Network |
createCollection / getCollection / getCollections | Create a collection, or get one/all collections |
putCollection / patchCollection | Replace or partially update a collection |
deleteCollection / duplicateCollection | Delete a collection, or duplicate it into another workspace |
getDuplicateCollectionTaskStatus / getCollectionUpdatesTasks | Check the status of an async collection duplication or update task |
generateCollection / generateSpecFromCollection | Generate a collection from a spec, or a spec from a collection |
getCollectionTags / updateCollectionTags | Get or update a collection's tags |
createCollectionFork / getCollectionForks / getCollectionsForkedByUser | Fork a collection, or list its forks / the user's forks |
mergeCollectionFork / pullCollectionChanges / getSourceCollectionStatus | Merge a fork back, pull upstream changes, or check fork/source drift |
createCollectionFolder / getCollectionFolder / updateCollectionFolder / deleteCollectionFolder | Create, read, update, or delete a folder in a collection |
transferCollectionFolders | Copy or move folders into a collection or folder |
createCollectionRequest / getCollectionRequest / updateCollectionRequest / deleteCollectionRequest | Create, read, update, or delete a request in a collection |
transferCollectionRequests | Copy or move requests into a collection or folder |
createCollectionResponse / getCollectionResponse / updateCollectionResponse / deleteCollectionResponse | Create, read, update, or delete a saved response on a request |
transferCollectionResponses | Copy or move responses into a request |
createCollectionComment / getCollectionComments / updateCollectionComment / deleteCollectionComment | Create, read, update, or delete a comment on a collection |
updateApiCollectionComment / deleteApiCollectionComment | Update or delete a comment on an API's collection |
createFolderComment / getFolderComments / updateFolderComment / deleteFolderComment | Create, read, update, or delete a comment on a folder |
createRequestComment / getRequestComments / updateRequestComment / deleteRequestComment | Create, read, update, or delete a comment on a request |
createResponseComment / getResponseComments / updateResponseComment / deleteResponseComment | Create, read, update, or delete a comment on a response |
resolveCommentThread / getTaggedEntities | Resolve a comment thread, or list entities tagged in comments (Enterprise plans) |
createEnvironment / getEnvironment / getEnvironments | Create an environment, or get one/all environments |
putEnvironment / patchEnvironment / deleteEnvironment | Replace, partially update, or delete an environment |
createMock / getMock / getMocks / updateMock / deleteMock | Create, read, update, or delete a mock server |
publishMock / unpublishMock | Publish or unpublish a mock server |
createMockServerResponse / getMockServerResponse / getMockServerResponses / updateMockServerResponse / deleteMockServerResponse | Create, read, update, or delete a mock server's canned responses |
createMonitor / getMonitor / getMonitors / updateMonitor / deleteMonitor | Create, read, update, or delete a monitor |
runMonitor / getMonitorRunResults | Run a monitor, or get results for a specific run |
listMonitorExecutions / listRunsForExecution | List a monitor's executions, or the runs within one |
createSpec / getSpec / getAllSpecs / deleteSpec | Create, read, list, or delete an API specification |
getSpecDefinition / getSpecCollections | Get a spec's full definition, or the collections generated from it |
createSpecFile / getSpecFile / getSpecFiles / updateSpecFile / deleteSpecFile | Create, read, update, or delete a file within an API specification |
updateSpecProperties | Update a spec's properties, such as its name |
syncSpecWithCollection / syncCollectionWithSpec / getGeneratedCollectionSpecs | Sync a spec and its linked collection in either direction, or inspect the link |
getAsyncSpecTaskStatus / getStatusOfAnAsyncApiTask | Check the status of an async spec-creation or other API task |
publishDocumentation / unpublishDocumentation | Publish or unpublish a collection's documentation |
getAnalyticsData / getAnalyticsMetadata | Get analytics data for a resource, or the metric catalog for the analytics API |
searchPostmanElements | Search across requests, collections, workspaces, specs, flows, and mocks |
searchLearningCenter | Search Postman's official documentation and learning resources |
getPostmanContextOverview / getApiDiscoveryInstructions / getCodeGenerationInstructions / getInstalledApiMaintenanceInstructions | Context and workflow guidance for discovering, generating from, and maintaining APIs in Postman |
A handful of these are worth a second look before you allow them broadly: respondPrivateNetworkAddRequest controls what joins your org's shared API network, publishMock/publishDocumentation make things externally visible, and the delete* family (collections, workspaces, mocks, monitors, specs, folders, requests, responses) is permanent — Postman has no recycle bin for most of these.
Policy examples
Read-only Postman for everyone
One deny rule blocks every mutating tool while leaving reads on the default path:
- In Access Policies, click Add Rule and name it "Postman: no writes."
- Set the effect pill to Deny and the MCP scope pill to Postman.
- Add these tool patterns:
create*,update*,delete*,put*,patch*,duplicate*,generate*,publish*,unpublish*,merge*,transfer*,resolve*,respond*,add*,remove*,run*,sync*,pull*. - Set the status to Active and click Create.
That prefix list covers every writer in the tool set above; everything left over — the get*, list*, and search tools — keeps working.
Scope one agent to collection and spec browsing only
An allow rule on its own restricts nothing, because every org is seeded with an Allow all rule that anything unmatched falls through to. To confine an agent, pair the allow with a deny beneath it:
- Create the deny rule first: effect Deny, MCP scope Postman, Agent scope your browsing agent, tool pattern
*. - Then create the allow rule: effect Allow, MCP scope Postman, the same Agent scope, tool patterns
getCollection,getCollections,getCollectionFolder,getCollectionRequest,getCollectionResponse,getSpec,getAllSpecs,getSpecDefinition,searchPostmanElements,searchLearningCenter.
Order matters, and so does the sequence you create them in: new rules insert at the top of the list, so building the deny first leaves the allow above it — which is what you need. Evaluation is first-match-wins, so the agent's browsing calls hit the allow, every other Postman call hits the deny, and neither ever reaches Allow all.
Scoping both rules to one agent keeps the blast radius small. A deny with no Agent scope would cut off every agent and user in the org.
Next steps
- Create a policy — the full rule editor walkthrough.
- Policies — how first-match-wins ordering and the default Allow all rule interact.
- Block an agent from deleting GitHub branches — the same deny-first shape on another resource.