Google Docs ACTION
Insert Image
Insert an inline image into a Google Doc from a publicly reachable image URL. The URL must be publicly accessible (Google fetches it server-side) and point to a PNG, JPEG, or GIF. Use Find Document to resolve a document's name to its ID. In a multi-tab document, set Tab ID to choose which tab receives the image — without it the image goes into the document's first tab; use List Tabs to get the IDs. See the documentation
- Action
- Writes data
- OAuth
- SDK
- MCP
IMPLEMENTATION
Call this tool
Connect a user's Google Docs account once, then configure and run Insert Image from your backend or agent.
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: "google_docs-insert-image",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
google_docs: { authProvisionId: "apn_xxxxxxx" },
documentId: "Document ID",
imageUri: "Image URL",
},
})
console.log(result)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": "google_docs-insert-image",
"configured_props": {
"google_docs": { "authProvisionId": "apn_xxxxxxx" },
"documentId": "Document ID",
"imageUri": "Image URL"
}
}'// 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": "google_docs",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
name: "google_docs-insert-image",
arguments: {
documentId: "Document ID",
imageUri: "Image URL",
},
})SCHEMA
Inputs
Pipedream supplies the connected account. Your application provides the operation-specific values below. Dynamic inputs are resolved against that user's account.
| Property | Type | Description |
|---|---|---|
documentId Document ID | string | The ID of the Google Doc. This is the long string in the document's URL: https://docs.google.com/document/d/{DOCUMENT_ID}/edit. Use Find Document to resolve a document's name to its ID. Required |
imageUri Image URL | string | A publicly reachable URL of the image to insert (PNG, JPEG, or GIF). Example: https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png. Required |
position Position | string | Where to insert the content: end to append to the end of the document (default), beginning to insert at the start, or a numeric character index (e.g., 1) for a specific location. Optional |
tabId Tab ID | string | For a multi-tab document, the ID of the tab to write into (e.g. t.0). Get tab IDs from List Tabs, or use the ID returned by Create Tab. Omit to write into the document's first tab — the Google Docs API sends every untargeted edit there, so pass this whenever the document has more than one tab. Optional |
REFERENCE
Tool details
Behavior hints are published with the component in the Pipedream registry and surface as MCP tool annotations, so an agent can reason about a tool before it calls it.
- Registry key
- google_docs-insert-image
- Version
- 0.1.0
- App
- Google Docs
- Authentication
- OAuth
- Read-only
- No
- Destructive
- No
- Open world
- Yes
- Source
- View on GitHub ↗