diff --git a/app/_components/platform-card.tsx b/app/_components/platform-card.tsx new file mode 100644 index 000000000..50950139e --- /dev/null +++ b/app/_components/platform-card.tsx @@ -0,0 +1,45 @@ +"use client"; +import { Card, CardHeader, CardTitle } from "@arcadeai/design-system"; +import { cn } from "@arcadeai/design-system/lib/utils"; +import Link from "next/link"; +import type React from "react"; + +type PlatformCardProps = { + name: string; + icon: string; + link: string; + type: "Agent Framework" | "MCP Client"; +}; + +export const PlatformCard: React.FC = ({ + name, + icon, + link, + type, +}) => { + const cardContent = ( + + +
+
+ {`${name} +
+
+ + {name} + +
+ {type} +
+
+
+
+
+ ); + + return {cardContent}; +}; diff --git a/app/en/home/_meta.tsx b/app/en/home/_meta.tsx index 056b3d3dc..f66b9463c 100644 --- a/app/en/home/_meta.tsx +++ b/app/en/home/_meta.tsx @@ -68,6 +68,9 @@ export const meta: MetaRecord = { type: "separator", title: "Agent Frameworks and MCP", }, + "agent-frameworks-overview": { + title: "Overview", + }, "mcp-clients": { title: "MCP Clients", }, diff --git a/app/en/home/agent-frameworks-overview/page.mdx b/app/en/home/agent-frameworks-overview/page.mdx new file mode 100644 index 000000000..fd49a55fc --- /dev/null +++ b/app/en/home/agent-frameworks-overview/page.mdx @@ -0,0 +1,90 @@ +import { PlatformCard } from "@/app/_components/platform-card"; +import { Tabs } from "nextra/components"; + +# Arcade with Agent Frameworks and MCP Clients + +Arcade seamlessly integrates with your favorite agent frameworks and MCP clients, making it easy to add powerful tool-calling capabilities to your AI applications. + +## Agent Frameworks + + + +
+ + + + +
+
+ +
+ + + + +
+
+
+ +## MCP Clients + +
+ + + +
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))