{
  "schemaVersion": "1.0",
  "item": {
    "slug": "pdauth",
    "name": "Pdauth",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/G9Pedro/pdauth",
    "canonicalUrl": "https://clawhub.ai/G9Pedro/pdauth",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/pdauth",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=pdauth",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/pdauth"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/pdauth",
    "agentPageUrl": "https://openagent3.xyz/skills/pdauth/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pdauth/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pdauth/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "pdauth — Dynamic OAuth for AI Agents",
        "body": "Use pdauth to give yourself (the agent) access to 2500+ APIs via OAuth. The flow:\n\nAgent needs access to an app (Spotify, Slack, Notion, etc.)\nGenerate an OAuth link with pdauth connect <app>\nShare link with user → they click and authorize\nAgent can now call tools via pdauth call <app.tool>"
      },
      {
        "title": "Quick Reference",
        "body": "# Configure (one-time setup)\npdauth config\n\n# Search for apps\npdauth apps --search spotify\n\n# Generate OAuth link\npdauth connect spotify --user USER_ID\n\n# Check what's connected\npdauth status --user USER_ID\n\n# List available tools\npdauth tools spotify --user USER_ID\n\n# Call a tool\npdauth call spotify.get_my_playlists --user USER_ID\npdauth call slack.send_message channel=general text=\"Hello!\""
      },
      {
        "title": "The OAuth Flow (How to Request Access)",
        "body": "When you need access to an app the user hasn't authorized:\n\n1. Run: pdauth connect <app> --user <user_id>\n2. Get the OAuth link from output\n3. Send link to user: \"To do this, I need access to <App>. Click here to authorize: <link>\"\n4. User clicks, authorizes via Pipedream\n5. Confirm with: pdauth status --user <user_id>\n6. Now you can call tools!"
      },
      {
        "title": "User ID Strategy",
        "body": "Use a consistent identifier per user:\n\nTelegram: telegram:5439689035\nEmail: pedro@example.com\nCustom: pedro-mainframe\n\nThe same user ID across sessions maintains their connected accounts."
      },
      {
        "title": "Calling Tools",
        "body": "# Format: pdauth call <app>.<tool_name> [key=value ...]\n\n# Simple args\npdauth call slack.send_message channel=general text=\"Hello\"\n\n# JSON args for complex data\npdauth call notion.create_page --args '{\"title\": \"My Page\", \"content\": \"...\"}'\n\n# Get JSON output for parsing\npdauth call spotify.get_my_playlists --json"
      },
      {
        "title": "Checking Status",
        "body": "# See what user has connected\npdauth status --user pedro\n\n# See all users\npdauth status --all\n\n# JSON for scripting\npdauth status --user pedro --json"
      },
      {
        "title": "Popular Apps",
        "body": "Browse all at https://mcp.pipedream.com\n\nAppSlugExample ToolsSlackslacksend_message, list_channelsSpotifyspotifyget_my_playlists, add_to_playlistNotionnotioncreate_page, query_databaseGoogle Sheetsgoogle_sheetsget_values, update_valuesGmailgmailsend_email, list_messagesGitHubgithubcreate_issue, list_reposLinearlinearcreate_issue, list_issuesAirtableairtablelist_records, create_record"
      },
      {
        "title": "Error Handling",
        "body": "\"App not connected\" → Generate link with pdauth connect and ask user to authorize\n\n\"Tool not found\" → List available tools with pdauth tools <app>\n\n\"Invalid credentials\" → Run pdauth config to set up Pipedream credentials"
      },
      {
        "title": "Tips",
        "body": "Always check status first before attempting tool calls\nUse consistent user IDs so connections persist across sessions\nJSON output (--json) is best for parsing results programmatically\nLink expiry — OAuth links expire after 4 hours, generate fresh ones as needed"
      },
      {
        "title": "Example Workflow",
        "body": "User: \"Add 'Bohemian Rhapsody' to my Spotify playlist\"\n\nAgent:\n1. pdauth status --user telegram:5439689035 --json\n   → No Spotify connection\n\n2. pdauth connect spotify --user telegram:5439689035\n   → Gets OAuth link\n\n3. Send to user: \"I need Spotify access. Click here: <link>\"\n\n4. User authorizes\n\n5. pdauth status --user telegram:5439689035\n   → Spotify ✓ connected\n\n6. pdauth call spotify.search_tracks query=\"Bohemian Rhapsody\" --json\n   → Get track ID\n\n7. pdauth call spotify.add_to_playlist playlist_id=... track_id=...\n   → Done!\n\n8. Reply: \"Added Bohemian Rhapsody to your playlist! 🎵\""
      }
    ],
    "body": "pdauth — Dynamic OAuth for AI Agents\n\nUse pdauth to give yourself (the agent) access to 2500+ APIs via OAuth. The flow:\n\nAgent needs access to an app (Spotify, Slack, Notion, etc.)\nGenerate an OAuth link with pdauth connect <app>\nShare link with user → they click and authorize\nAgent can now call tools via pdauth call <app.tool>\nQuick Reference\n# Configure (one-time setup)\npdauth config\n\n# Search for apps\npdauth apps --search spotify\n\n# Generate OAuth link\npdauth connect spotify --user USER_ID\n\n# Check what's connected\npdauth status --user USER_ID\n\n# List available tools\npdauth tools spotify --user USER_ID\n\n# Call a tool\npdauth call spotify.get_my_playlists --user USER_ID\npdauth call slack.send_message channel=general text=\"Hello!\"\n\nThe OAuth Flow (How to Request Access)\n\nWhen you need access to an app the user hasn't authorized:\n\n1. Run: pdauth connect <app> --user <user_id>\n2. Get the OAuth link from output\n3. Send link to user: \"To do this, I need access to <App>. Click here to authorize: <link>\"\n4. User clicks, authorizes via Pipedream\n5. Confirm with: pdauth status --user <user_id>\n6. Now you can call tools!\n\nUser ID Strategy\n\nUse a consistent identifier per user:\n\nTelegram: telegram:5439689035\nEmail: pedro@example.com\nCustom: pedro-mainframe\n\nThe same user ID across sessions maintains their connected accounts.\n\nCalling Tools\n# Format: pdauth call <app>.<tool_name> [key=value ...]\n\n# Simple args\npdauth call slack.send_message channel=general text=\"Hello\"\n\n# JSON args for complex data\npdauth call notion.create_page --args '{\"title\": \"My Page\", \"content\": \"...\"}'\n\n# Get JSON output for parsing\npdauth call spotify.get_my_playlists --json\n\nChecking Status\n# See what user has connected\npdauth status --user pedro\n\n# See all users\npdauth status --all\n\n# JSON for scripting\npdauth status --user pedro --json\n\nPopular Apps\n\nBrowse all at https://mcp.pipedream.com\n\nApp\tSlug\tExample Tools\nSlack\tslack\tsend_message, list_channels\nSpotify\tspotify\tget_my_playlists, add_to_playlist\nNotion\tnotion\tcreate_page, query_database\nGoogle Sheets\tgoogle_sheets\tget_values, update_values\nGmail\tgmail\tsend_email, list_messages\nGitHub\tgithub\tcreate_issue, list_repos\nLinear\tlinear\tcreate_issue, list_issues\nAirtable\tairtable\tlist_records, create_record\nError Handling\n\n\"App not connected\" → Generate link with pdauth connect and ask user to authorize\n\n\"Tool not found\" → List available tools with pdauth tools <app>\n\n\"Invalid credentials\" → Run pdauth config to set up Pipedream credentials\n\nTips\nAlways check status first before attempting tool calls\nUse consistent user IDs so connections persist across sessions\nJSON output (--json) is best for parsing results programmatically\nLink expiry — OAuth links expire after 4 hours, generate fresh ones as needed\nExample Workflow\nUser: \"Add 'Bohemian Rhapsody' to my Spotify playlist\"\n\nAgent:\n1. pdauth status --user telegram:5439689035 --json\n   → No Spotify connection\n\n2. pdauth connect spotify --user telegram:5439689035\n   → Gets OAuth link\n\n3. Send to user: \"I need Spotify access. Click here: <link>\"\n\n4. User authorizes\n\n5. pdauth status --user telegram:5439689035\n   → Spotify ✓ connected\n\n6. pdauth call spotify.search_tracks query=\"Bohemian Rhapsody\" --json\n   → Get track ID\n\n7. pdauth call spotify.add_to_playlist playlist_id=... track_id=...\n   → Done!\n\n8. Reply: \"Added Bohemian Rhapsody to your playlist! 🎵\""
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/G9Pedro/pdauth",
    "publisherUrl": "https://clawhub.ai/G9Pedro/pdauth",
    "owner": "G9Pedro",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/pdauth",
    "downloadUrl": "https://openagent3.xyz/downloads/pdauth",
    "agentUrl": "https://openagent3.xyz/skills/pdauth/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pdauth/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pdauth/agent.md"
  }
}