diff --git a/app/en/home/auth-providers/pagerduty/page.mdx b/app/en/home/auth-providers/pagerduty/page.mdx
index 992dcb5ed..fefab4e14 100644
--- a/app/en/home/auth-providers/pagerduty/page.mdx
+++ b/app/en/home/auth-providers/pagerduty/page.mdx
@@ -4,6 +4,10 @@ import { Tabs, Callout, Steps } from "nextra/components";
The PagerDuty auth provider enables tools and agents to call [PagerDuty APIs](https://developer.pagerduty.com/api-reference/) on behalf of a user using OAuth 2.0 authentication.
+
+Arcade currently supports **Classic** PagerDuty OAuth apps only. Choose Classic and select either **read-only** or **read/write** access. Newer Web App or other models are not supported. See [PagerDuty OAuth functionality](https://developer.pagerduty.com/docs/oauth-functionality).
+
+
Want to quickly get started with PagerDuty in your agent or AI app? The
pre-built [Arcade PagerDuty MCP
@@ -56,10 +60,10 @@ To integrate with PagerDuty's API using OAuth 2.0, you'll need to register an ap
#### Configure OAuth settings
-1. Choose **Scoped OAuth** as the authorization method
-2. Select the required **permission scopes** based on your application's needs:
- - Common scopes include: `read`, `write`, `analytics.read`, `users.read`, `teams.read`, etc.
-3. Add the **Redirect URL** generated by Arcade (see configuration section below) to your app's redirect URLs
+1. Choose **Classic** OAuth and select the permission level:
+ - **Read-only** (recommended; all current MCP tools only read data)
+ - Or **Read/Write** if you plan custom tools that modify data
+2. Add the **Redirect URL** generated by Arcade (see configuration section below) to your app's redirect URLs
#### Save your credentials
@@ -68,7 +72,7 @@ To integrate with PagerDuty's API using OAuth 2.0, you'll need to register an ap
-For detailed instructions, refer to PagerDuty's [OAuth 2.0 guide](https://www.pagerduty.com/blog/insights/build-sophisticated-apps-for-your-pagerduty-environment-using-oauth-2-0-and-api-scopes/) and [OAuth documentation](https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTgx-o-auth-2-functionality).
+For detailed instructions, refer to PagerDuty's [OAuth 2.0 guide](https://www.pagerduty.com/blog/insights/build-sophisticated-apps-for-your-pagerduty-environment-using-oauth-2-0-and-api-scopes/) and [OAuth documentation](https://developer.pagerduty.com/docs/oauth-functionality).
Next, add the PagerDuty app to Arcade.
@@ -143,7 +147,7 @@ Edit the `engine.yaml` file and add a new item to the `auth.providers` section:
```yaml
auth:
providers:
- - id: arcade-pagerduty
+ - id: pagerduty
description: PagerDuty OAuth 2.0 provider
enabled: true
type: oauth2
@@ -195,8 +199,8 @@ user_id = "{arcade_user_id}"
# Start the authorization process
auth_response = client.auth.start(
user_id=user_id,
- provider="arcade-pagerduty",
- scopes=["read", "write"]
+ provider="pagerduty",
+ scopes=[]
)
if auth_response.status != "completed":
@@ -222,10 +226,7 @@ const client = new Arcade();
const userId = "{arcade_user_id}";
// Start the authorization process
-const authResponse = await client.auth.start(userId, "arcade-pagerduty", [
- "read",
- "write",
-]);
+const authResponse = await client.auth.start(userId, "pagerduty", []);
if (authResponse.status !== "completed") {
console.log("Please complete the authorization challenge in your browser:");
@@ -249,21 +250,18 @@ You can use the pre-built [Arcade PagerDuty MCP Server](/mcp-servers/development
If the pre-built tools in the PagerDuty MCP Server don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the PagerDuty API.
-Use the `OAuth2()` auth class to specify that a tool requires authorization with PagerDuty. The `context.authorization.token` field will be automatically populated with the user's PagerDuty token:
+Use the `PagerDuty()` auth class to specify that a tool requires authorization with PagerDuty. The `context.authorization.token` field will be automatically populated with the user's PagerDuty token:
```python {8-12,22}
from typing import Annotated
import httpx
from arcade_tdk import ToolContext, tool
-from arcade_tdk.auth import OAuth2
+from arcade_tdk.auth import PagerDuty
@tool(
- requires_auth=OAuth2(
- provider_id="arcade-pagerduty",
- scopes=["read"]
- )
+ requires_auth=PagerDuty()
)
async def get_current_user(
context: ToolContext,
@@ -283,11 +281,11 @@ async def get_current_user(
return dict(response.json())
```
-## Available Scopes
+## Permissions
-PagerDuty uses a simplified scope system with the following scopes:
+PagerDuty Classic apps use two permission levels:
-- `read` - Read-only access to PagerDuty resources
-- `write` - Full read and write access to PagerDuty resources
+- **read** — Read-only access to PagerDuty resources (recommended; all current MCP tools are read-only)
+- **write** — Full read/write access (only needed if you add custom write tools)
-For more details about PagerDuty's OAuth scopes and permissions, refer to the [PagerDuty OAuth Scopes documentation](https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTgx-o-auth-2-functionality#scopes).
+For more details about PagerDuty’s OAuth permissions, refer to the [PagerDuty OAuth functionality docs](https://developer.pagerduty.com/docs/oauth-functionality#scopes).
diff --git a/app/en/mcp-servers/customer-support/_meta.tsx b/app/en/mcp-servers/customer-support/_meta.tsx
index 192bec491..c05c04093 100644
--- a/app/en/mcp-servers/customer-support/_meta.tsx
+++ b/app/en/mcp-servers/customer-support/_meta.tsx
@@ -14,6 +14,9 @@ const meta: MetaRecord = {
pylon: {
title: "Pylon",
},
+ pagerduty: {
+ title: "PagerDuty",
+ },
};
export default meta;
diff --git a/app/en/mcp-servers/customer-support/pagerduty/page.mdx b/app/en/mcp-servers/customer-support/pagerduty/page.mdx
new file mode 100644
index 000000000..a7e7cb10e
--- /dev/null
+++ b/app/en/mcp-servers/customer-support/pagerduty/page.mdx
@@ -0,0 +1,597 @@
+# PagerDuty
+
+import ToolInfo from "@/app/_components/tool-info";
+import Badges from "@/app/_components/badges";
+import TabbedCodeBlock from "@/app/_components/tabbed-code-block";
+import TableOfContents from "@/app/_components/table-of-contents";
+import ToolFooter from "@/app/_components/tool-footer";
+import { Callout } from "nextra/components";
+
+
+
+
+
+The PagerDuty MCP Server lets agents list and inspect incidents, on-calls, services, teams, users, schedules, log entries, and escalation policies. Follows the Linear-style docs with code snippets in Python and JavaScript.
+
+
+ Arcade supports Classic PagerDuty apps. Select **read-only** access; all tools
+ in this MCP Server only read data. (Use read/write only if you add custom
+ write tools.) See [PagerDuty OAuth
+ functionality](https://developer.pagerduty.com/docs/oauth-functionality).
+
+
+
+ Configure PagerDuty OAuth in the [PagerDuty auth
+ provider](/home/auth-providers/pagerduty) before using these tools.
+
+
+## Available tools
+
+
+
+
+ If you need a tool that's not listed, [contact us](mailto:contact@arcade.dev)
+ or [build your own](/home/build-tools/create-a-mcp-server).
+
+
+
+ - `readOnlyHint` — reads data only - `openWorldHint` — calls PagerDuty's
+ external API - `destructiveHint` — none of these tools delete data -
+ `idempotentHint` — repeating the same read call returns the same data
+
+
+---
+
+## User context
+
+### PagerDuty.WhoAmI
+
+Get the authenticated user's profile plus current on-call info.
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+None.
+
+**API calls:** GET `/users/me`, GET `/oncalls`
+
+---
+
+## Incident tools
+
+### PagerDuty.ListIncidents
+
+List incidents with filters (status, urgency, services, teams, time window).
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **status** (`enum`, _optional_) Filter by status.
+- **urgency** (`enum`, _optional_) Filter by urgency.
+- **service_ids** (`array`, _optional_) Filter by service IDs.
+- **team_ids** (`array`, _optional_) Filter by team IDs.
+- **since** / **until** (`string`, _optional_) ISO-8601 time range.
+- **limit** (`integer`, _optional_) 1-50, default 10.
+- **offset** (`integer`, _optional_) Pagination offset.
+
+**API calls:** GET `/incidents`
+
+---
+
+### PagerDuty.GetIncident
+
+Get a single incident by ID.
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **incident_id** (`string`, **required**) Incident ID.
+
+**API calls:** GET `/incidents/{id}`
+
+---
+
+### PagerDuty.ListLogEntries
+
+List account log entries (activity feed).
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **since** / **until** (`string`, _optional_) ISO-8601 time range.
+- **team_ids** (`array`, _optional_) Filter by team IDs.
+- **time_zone** (`string`, _optional_) IANA time zone.
+- **is_overview** (`boolean`, _optional_) Compact mode. Default: `true`.
+- **limit** (`integer`, _optional_) 1-50. Default: 10.
+- **offset** (`integer`, _optional_) Pagination offset.
+
+**API calls:** GET `/log_entries`
+
+---
+
+## Escalation policy tools
+
+### PagerDuty.ListEscalationPolicies
+
+List escalation policies.
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **limit** (`integer`, _optional_) 1-50. Default: 10.
+- **offset** (`integer`, _optional_) Pagination offset.
+
+**API calls:** GET `/escalation_policies`
+
+---
+
+### PagerDuty.GetEscalationPolicy
+
+Get escalation policy details.
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **escalation_policy_id** (`string`, **required**) Escalation policy ID.
+
+**API calls:** GET `/escalation_policies/{id}`
+
+---
+
+## Service tools
+
+### PagerDuty.ListServices
+
+List services (optional name search).
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **query** (`string`, _optional_) Search by name.
+- **limit** (`integer`, _optional_) 1-50. Default: 10.
+- **offset** (`integer`, _optional_) Pagination offset.
+
+**API calls:** GET `/services`
+
+---
+
+### PagerDuty.GetService
+
+Get service details.
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **service_id** (`string`, **required**) Service ID.
+
+**API calls:** GET `/services/{id}`
+
+---
+
+## Schedule tools
+
+### PagerDuty.ListSchedules
+
+List schedules with optional time zone and pagination.
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **limit** (`integer`, _optional_) 1-50. Default: 10.
+- **offset** (`integer`, _optional_) Pagination offset.
+- **time_zone** (`string`, _optional_) IANA time zone.
+
+**API calls:** GET `/schedules`
+
+---
+
+## On-call tools
+
+### PagerDuty.ListOnCalls
+
+List on-call entries with filters (schedule, escalation policy, team, time).
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **schedule_ids** (`array`, _optional_) Filter by schedules.
+- **escalation_policy_ids** (`array`, _optional_) Filter by escalation policies.
+- **team_ids** (`array`, _optional_) Filter by teams.
+- **time_zone** (`string`, _optional_) IANA time zone.
+- **since** / **until** (`string`, _optional_) ISO times.
+- **limit** (`integer`, _optional_) 1-50. Default: 10.
+- **offset** (`integer`, _optional_) Pagination offset.
+
+**API calls:** GET `/oncalls`
+
+---
+
+## User tools
+
+### PagerDuty.ListUsers
+
+List users with pagination.
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **limit** (`integer`, _optional_) 1-50. Default: 10.
+- **offset** (`integer`, _optional_) Pagination offset.
+
+**API calls:** GET `/users`
+
+---
+
+### PagerDuty.SearchUsers
+
+Search users by name/email (fuzzy).
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **query** (`string`, **required**) Name or email fragment.
+- **auto_accept_matches** (`boolean`, _optional_) Auto-accept above confidence threshold. Default: `false`.
+
+**API calls:** GET `/users` (fuzzy match locally)
+
+---
+
+## Team tools
+
+### PagerDuty.ListTeams
+
+List teams with pagination.
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **limit** (`integer`, _optional_) 1-50. Default: 10.
+- **offset** (`integer`, _optional_) Pagination offset.
+
+**API calls:** GET `/teams`
+
+---
+
+### PagerDuty.GetTeam
+
+Get team details (members, linked services/policies).
+
+
+ - `readOnlyHint: true` — reads data only - `openWorldHint: true` — calls
+ PagerDuty’s external API - `destructiveHint: false` — no destructive
+ operations - `idempotentHint: true` — same request returns same data
+
+
+
+
+**Parameters**
+
+- **team_id** (`string`, **required**) Team ID.
+
+**API calls:** GET `/teams/{id}`
+
+---
+
+## Auth
+
+PagerDuty requires OAuth2. Configure the PagerDuty auth provider and request the scopes shown above per tool. Tokens are passed as Bearer auth:
+
+```
+Authorization: Bearer
+```
+
+See PagerDuty auth docs: [PagerDuty API Authentication](https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTYz-authentication).
+
+
diff --git a/public/examples/integrations/mcp-servers/pagerduty/get_escalation_policy_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/get_escalation_policy_example_call_tool.js
new file mode 100644
index 000000000..5d8013549
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/get_escalation_policy_example_call_tool.js
@@ -0,0 +1,23 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.GetEscalationPolicy";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ escalation_policy_id: "",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/get_escalation_policy_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/get_escalation_policy_example_call_tool.py
new file mode 100644
index 000000000..b55f648f6
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/get_escalation_policy_example_call_tool.py
@@ -0,0 +1,22 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.GetEscalationPolicy"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "escalation_policy_id": "",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/get_incident_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/get_incident_example_call_tool.js
new file mode 100644
index 000000000..bea0b6be9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/get_incident_example_call_tool.js
@@ -0,0 +1,23 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.GetIncident";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ incident_id: "",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/get_incident_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/get_incident_example_call_tool.py
new file mode 100644
index 000000000..0da8360f8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/get_incident_example_call_tool.py
@@ -0,0 +1,22 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.GetIncident"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "incident_id": "",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/get_service_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/get_service_example_call_tool.js
new file mode 100644
index 000000000..e4ca91dde
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/get_service_example_call_tool.js
@@ -0,0 +1,23 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.GetService";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ service_id: "",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/get_service_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/get_service_example_call_tool.py
new file mode 100644
index 000000000..c18d58372
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/get_service_example_call_tool.py
@@ -0,0 +1,22 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.GetService"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "service_id": "",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/get_team_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/get_team_example_call_tool.js
new file mode 100644
index 000000000..6121d4a97
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/get_team_example_call_tool.js
@@ -0,0 +1,23 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.GetTeam";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ team_id: "",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/get_team_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/get_team_example_call_tool.py
new file mode 100644
index 000000000..9594a47ce
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/get_team_example_call_tool.py
@@ -0,0 +1,22 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.GetTeam"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "team_id": "",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_escalation_policies_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/list_escalation_policies_example_call_tool.js
new file mode 100644
index 000000000..87ad9d982
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_escalation_policies_example_call_tool.js
@@ -0,0 +1,24 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.ListEscalationPolicies";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ limit: 10,
+ offset: null,
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_escalation_policies_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/list_escalation_policies_example_call_tool.py
new file mode 100644
index 000000000..34ec9873d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_escalation_policies_example_call_tool.py
@@ -0,0 +1,23 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.ListEscalationPolicies"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "limit": 10,
+ "offset": None,
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_incidents_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/list_incidents_example_call_tool.js
new file mode 100644
index 000000000..6576caa5a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_incidents_example_call_tool.js
@@ -0,0 +1,30 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.ListIncidents";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ status: null,
+ urgency: null,
+ service_ids: null,
+ team_ids: null,
+ since: null,
+ until: null,
+ limit: 10,
+ offset: null,
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_incidents_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/list_incidents_example_call_tool.py
new file mode 100644
index 000000000..8c2a5cd8c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_incidents_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.ListIncidents"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "status": None,
+ "urgency": None,
+ "service_ids": None,
+ "team_ids": None,
+ "since": None,
+ "until": None,
+ "limit": 10,
+ "offset": None,
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_log_entries_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/list_log_entries_example_call_tool.js
new file mode 100644
index 000000000..b7db7970d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_log_entries_example_call_tool.js
@@ -0,0 +1,29 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.ListLogEntries";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ since: null,
+ until: null,
+ team_ids: null,
+ time_zone: null,
+ is_overview: true,
+ limit: 10,
+ offset: null,
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_log_entries_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/list_log_entries_example_call_tool.py
new file mode 100644
index 000000000..1363fb0e8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_log_entries_example_call_tool.py
@@ -0,0 +1,28 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.ListLogEntries"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "since": None,
+ "until": None,
+ "team_ids": None,
+ "time_zone": None,
+ "is_overview": True,
+ "limit": 10,
+ "offset": None,
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_oncalls_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/list_oncalls_example_call_tool.js
new file mode 100644
index 000000000..803ea2faf
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_oncalls_example_call_tool.js
@@ -0,0 +1,30 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.ListOnCalls";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ schedule_ids: null,
+ escalation_policy_ids: null,
+ team_ids: null,
+ time_zone: null,
+ since: null,
+ until: null,
+ limit: 10,
+ offset: null,
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_oncalls_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/list_oncalls_example_call_tool.py
new file mode 100644
index 000000000..59ccf3612
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_oncalls_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.ListOnCalls"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "schedule_ids": None,
+ "escalation_policy_ids": None,
+ "team_ids": None,
+ "time_zone": None,
+ "since": None,
+ "until": None,
+ "limit": 10,
+ "offset": None,
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_schedules_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/list_schedules_example_call_tool.js
new file mode 100644
index 000000000..81bc11fab
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_schedules_example_call_tool.js
@@ -0,0 +1,25 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.ListSchedules";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ limit: 10,
+ offset: null,
+ time_zone: null,
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_schedules_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/list_schedules_example_call_tool.py
new file mode 100644
index 000000000..8930baa67
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_schedules_example_call_tool.py
@@ -0,0 +1,24 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.ListSchedules"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "limit": 10,
+ "offset": None,
+ "time_zone": None,
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_services_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/list_services_example_call_tool.js
new file mode 100644
index 000000000..ec8c8ea70
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_services_example_call_tool.js
@@ -0,0 +1,25 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.ListServices";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ query: null,
+ limit: 10,
+ offset: null,
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_services_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/list_services_example_call_tool.py
new file mode 100644
index 000000000..5303d632e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_services_example_call_tool.py
@@ -0,0 +1,24 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.ListServices"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "query": None,
+ "limit": 10,
+ "offset": None,
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_teams_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/list_teams_example_call_tool.js
new file mode 100644
index 000000000..914118ecf
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_teams_example_call_tool.js
@@ -0,0 +1,24 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.ListTeams";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ limit: 10,
+ offset: null,
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_teams_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/list_teams_example_call_tool.py
new file mode 100644
index 000000000..92e532959
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_teams_example_call_tool.py
@@ -0,0 +1,23 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.ListTeams"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "limit": 10,
+ "offset": None,
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_users_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/list_users_example_call_tool.js
new file mode 100644
index 000000000..077a5a5f2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_users_example_call_tool.js
@@ -0,0 +1,24 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.ListUsers";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ limit: 10,
+ offset: null,
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/list_users_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/list_users_example_call_tool.py
new file mode 100644
index 000000000..e7e24f7d6
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/list_users_example_call_tool.py
@@ -0,0 +1,23 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.ListUsers"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "limit": 10,
+ "offset": None,
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/search_users_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/search_users_example_call_tool.js
new file mode 100644
index 000000000..e8f59ff56
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/search_users_example_call_tool.js
@@ -0,0 +1,24 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.SearchUsers";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ query: "Alex",
+ auto_accept_matches: false,
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/search_users_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/search_users_example_call_tool.py
new file mode 100644
index 000000000..a62cdbfe3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/search_users_example_call_tool.py
@@ -0,0 +1,23 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.SearchUsers"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ "query": "Alex",
+ "auto_accept_matches": False,
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/pagerduty/whoami_example_call_tool.js b/public/examples/integrations/mcp-servers/pagerduty/whoami_example_call_tool.js
new file mode 100644
index 000000000..9e0b7d02d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/whoami_example_call_tool.js
@@ -0,0 +1,19 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade();
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "PagerDuty.WhoAmI";
+
+const authResponse = await client.tools.authorize({ tool_name: TOOL_NAME, user_id: USER_ID });
+if (authResponse.status !== "completed") {
+ console.log(`Authorize here: ${authResponse.url}`);
+}
+await client.auth.waitForCompletion(authResponse);
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: {},
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/pagerduty/whoami_example_call_tool.py b/public/examples/integrations/mcp-servers/pagerduty/whoami_example_call_tool.py
new file mode 100644
index 000000000..fec657a13
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/pagerduty/whoami_example_call_tool.py
@@ -0,0 +1,18 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade()
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "PagerDuty.WhoAmI"
+
+auth_response = client.tools.authorize(tool_name=TOOL_NAME, user_id=USER_ID)
+if auth_response.status != "completed":
+ print(f"Authorize here: {auth_response.url}")
+client.auth.wait_for_completion(auth_response)
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input={},
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))