CONNECT APP
Build with Raindrop
Productivity
- OAuth
MCP
Give your agent Raindrop tools
Every Raindrop action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's Raindrop account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "raindrop",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Create New Collection:
const result = await mcp.callTool({
name: "raindrop-create-collection",
arguments: {
title: "Title",
sort: 10,
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "raindrop",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Create New Collection:
result = await session.call_tool("raindrop-create-collection", {
"title": "Title",
"sort": 10,
})API PROXY
Call the Raindrop API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Raindrop API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://api.raindrop.io/rest/v1/user",
})
// Any allowed Raindrop endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://api.raindrop.io/rest/v1/user
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkucmFpbmRyb3AuaW8vcmVzdC92MS91c2Vy?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Raindrop actions from your backend
Connect a user's Raindrop account once, then run Create New Collection on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "raindrop-create-collection",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
raindrop: { authProvisionId: "apn_xxxxxxx" },
title: "Title",
sort: 10,
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="raindrop-create-collection",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"raindrop": {"authProvisionId": "apn_xxxxxxx"},
"title": "Title",
"sort": 10,
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "raindrop-create-collection",
"configured_props": {
"raindrop": { "authProvisionId": "apn_xxxxxxx" },
"title": "Title",
"sort": 10
}
}'TOOLS
Raindrop actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Create New Collection
actionCreates an additional collection. See the docs hereWritev0.0.6 -
Delete Bookmark
actionDelete a bookmark. See the docs hereWritev0.0.6 -
Delete Collection
actionDelete a collection. See the docs hereWritev0.0.6 -
Get Bookmark
actionRetrieve bookmark detailed information by given ID. See the docs hereRead-onlyv0.0.6 -
Get Collection
actionGet collection. See the docs hereRead-onlyv0.0.6 -
Parse HTML Bookmark File
actionConvert an HTML bookmark file to JSON. Supports Nestcape, Pocket and Instapaper file formats. See the documentationWritev1.0.5 -
Retrieve All Collections
actionRetrieves all collections. See the docs hereRead-onlyv0.0.6 -
Retrieve Bookmarks from Collection
actionRetrieves all bookmarks from the specified collection. See docsRead-onlyv0.2.4 -
Save to Raindrop Collection
actionReceive a link and save it into a specified collection. See docsWritev1.2.4 -
Update Bookmark
actionUpdate an existing bookmark. See the docs hereWritev0.0.6 -
Update Collection
actionUpdate an existing collection. See the docs hereWritev0.0.6
EVENTS
Raindrop triggers
Event sources your backend can deploy for users and receive through a webhook.
MULTI-APP
Use Raindrop with other popular apps
Most products don't stop at one integration. Pair Raindrop with the other apps your users rely on, and ship use cases that span both.
- App slug
- raindrop
- Authentication
- OAuth
- Categories
- Productivity
- Actions
- 11
- Triggers
- 2
- API proxy
- Available