llms.txt@14-Connectors · git:20260531.24c35cc · 2026-05-31 · sha256 fd54d0157f0a0514
llms.txt@14-Connectors git:20260531.24c35ccB
Immutable. This exact content never changes and is served at /api/v1/blob/fd54d0157f0a0514.
# Connectors
All documentation for Connectors.
---
## about-integrations-using-remote-mcp.md
# Get started with custom connectors using remote MCP
Custom connectors using remote MCP are available on Claude and Claude Desktop for users on free, Pro, Max, Team, and Enterprise plans. Free users are limited to one custom connector. This feature is currently in beta.
## What are custom connectors?
Custom connectors let you connect Claude directly to the tools and data sources that matter most to your workflows. This enables Claude to operate within your favorite software and draw insights from the complete context of your external tools.
You can:
- Connect Claude to existing remote MCP servers.
- Build your own remote MCP servers to connect with any tool.
**⚠️ Security and Privacy with Custom Connectors (beta)**
Be aware that custom connectors allow you to connect Claude to services that have not been verified by Anthropic, and allow Claude to access and take action in these services. For more guidance, review the **[Security and privacy considerations](#h_9088ccdf4d)** section below.
## What are remote MCP servers?
The Model Context Protocol (MCP) is an open standard, created by Anthropic, for AI applications to connect to tools and data.
Previously, **[MCP servers only ran locally](https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop)** (i.e. on a user's laptop). Now, developers can build and host remote MCP servers that communicate with AI apps over the internet.
Remote MCP servers give models access to internet-hosted tools and data, transforming Claude into an informed teammate that can independently handle complex, multi-step projects tailored to your needs.
## Add a custom connector
**Note:** While anyone can build and host connectors using remote MCP, only Owners can add them to Team and Enterprise plans. Once a connector has been added to a Team or Enterprise organization, users individually connect to and enable that connector. This ensures that Claude can only access tools and data that the individual user has access to.
### For Team and Enterprise plans
**Preliminary steps for owners:**
Before members of Team and Enterprise plans can configure custom connectors, an Owner or Primary Owner needs to follow these initial steps to add a custom connector to your organization:
1. Navigate to **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
2. Click "Add custom connector" at the bottom of the section.
3. Add your connector's remote MCP server URL.
4. Optionally, click “Advanced settings” to specify an OAuth Client ID and OAuth Client Secret for your server.
5. Finish configuring your connector by clicking "Add."
**Steps for members after connector is configured:**
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Locate the "Connectors" section.
3. Find the custom connector your Owner added in the list (it will have a "Custom" label).
4. Click "Connect" to authenticate and start using the connector with Claude.
### For Pro and Max plans
If you are using an individual Pro or Max plan, follow these steps to add a custom connector:
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Locate the "Connectors" section.
3. Click "Add custom connector" at the bottom of the section.
4. Add your connector's remote MCP server URL.
5. Optionally, click “Advanced settings” to specify an OAuth Client ID and OAuth Client Secret for your server.
6. Finish configuring your connector by clicking "Add."
### Enabling connectors after configuration
You can enable connectors for individual conversations via the “+” button on the lower left of your chat interface, then "Connectors." You'll see your configured connectors with toggles allowing you to enable/disable them per conversation.
## How to remove connectors
You can remove a custom connector by following these steps:
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**
1. Team and Enterprise Owners can do this on their organization's behalf in **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**
2. Locate the "Connectors" section.
3. Click "Remove" or select the three dots next to the connector you'd like to remove.
4. Follow the prompts to remove.
If you're hoping to edit a custom connector, you'll need to remove it first, then re-add it using the updated details.
## How to build custom connectors
To learn about building connectors to use with Claude, see Building custom connectors via remote MCP servers.
## Security and privacy considerations
Custom connectors allow you to connect Claude to arbitrary services that have not been verified by Anthropic. When you connect Claude to external services, you're granting it the ability to access and potentially modify data within those services based on your permissions. It’s important to make sure you’re only connecting to remote MCP servers that you trust and that you’re aware of Claude’s interactions with web connectors.
### Security and permissions
When you add a custom connector to Claude, you'll typically go through an OAuth authentication process to securely sign in to the application and grant specific permissions. This allows Claude to interact with the application on your behalf, without Claude ever seeing your actual password. You can revoke these permissions at any time by disconnecting the connector in Claude's settings or the third-party service's security settings.
Remote MCP servers act as intermediaries between Claude and external applications. You should:
- **Only connect to trusted servers:** Only connect Claude to servers built and hosted by organizations and applications you trust.
- **Review requested permissions carefully:** During auth, review what permissions the MCP server is requesting to the application. Limit these scopes when possible and deny access if requested permissions seem unnecessary.
- **Be aware of prompt injections:** Malicious MCP servers may include hidden instructions that try to make Claude perform unintended actions. Claude has built-in protections that attempt to block these attacks, but it's important to pay attention to tool inputs & outputs and connect only to trusted servers.
- **Monitor changes in tool behavior:** Server developers may update tool behavior unexpectedly, leading to unintended or malicious behavior.
### Reporting malicious MCP servers
If you become aware of a malicious MCP server, please report it to our **[vulnerability disclosure program](https://hackerone.com/anthropic-vdp/)**, and choose [`https://github.com/modelcontextprotocol`](https://github.com/modelcontextprotocol) as the Asset.
### Taking actions with tools
Remote MCP servers give Claude tools it can invoke during your conversation. The developer of an MCP server can define what these tools do, including:
- Reading data from connected applications.
- Creating, modifying, or deleting data in connected applications.
- Taking actions on behalf of the user.
Claude can only access resources that you've given the server permission to access, but you should:
- Be aware of any actions Claude is taking and that they have no destructive or unintended effects.
- Review Claude's tool approval requests carefully and only click "Allow always" when using a server and tool that you trust to run unsupervised.
- Using the "Search and tools" menu, disable any tools that aren't relevant to the current conversation or that you don't want Claude to be able to invoke.
### Interactive connectors
Some connectors can display interactive interfaces directly within your Claude conversations. Instead of only returning text-based responses, these connectors can open live, interactive apps — like dashboards, task boards, or design tools — right in the chat.
Interactive connectors appear in two ways:
- **Inline cards:** Compact components embedded in the conversation, showing summaries, confirmations, or quick actions.
- **Fullscreen view:** Immersive interfaces for complex interactions like data visualizations or document editing. The conversation composer remains available so you can continue chatting with Claude.
You can interact with these connectors directly — filtering data, checking off tasks, adjusting settings — without leaving the conversation. Any actions you take within the interface use the same permissions you granted when connecting the tool.
**Admin controls:** Team and Enterprise plan owners can disable specific tool calls that render interactive connectors within **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
### Using Claude with Research
**Note:** **[Advanced Research](https://claude.com/blog/integrations)** is not currently able to invoke tools from local MCP servers.
Research allows Claude to deeply investigate queries by searching through hundreds of internal and external sources. During the research process, Claude can invoke tools from your connectors automatically without further approval.
When using Research with custom connectors:
- Disable any tools that can take write actions in external applications.
- Review Claude’s approval request carefully and be aware of which tools you’re granting Claude permission to invoke.
- Be mindful of the impact of Claude sending a large number of requests to your connectors.
See **[Using Research on Claude](../15-Claude-AI-Features/using-research-on-claude.md)** for more information about this feature.
---
## anthropic-connectors-directory-faq.md
# Anthropic Connectors Directory FAQ
## What is MCP?
MCP stands for Model Context Protocol, an open standard created by Anthropic that allows AI applications to connect to tools and data sources. For comprehensive information about MCPs and how to get started, please refer to our remote MCP guide: [Getting Started with Custom Connectors Using Remote MCP](getting-started-with-custom-connectors-using-remote-mcp.md).
## What is the Connectors Directory?
The [Connectors Directory](https://claude.com/connectors) aims to showcase Model Context Protocol servers that work with Claude across all our platforms - Claude web, Claude Desktop, our Claude mobile apps, Claude Code, and our API. The Connectors Directory serves as a single hub where users can discover MCP servers that Anthropic has reviewed.
### How do I get my MCP listed in the directory?
You can fill out our [Connectors Directory server review form](https://docs.google.com/forms/d/e/1FAIpQLSeafJF2NDI7oYx1r8o0ycivCSVLNq92Mpc1FPxMKSw1CzDkqA/viewform) and we'll reach out about next steps if your MCP would be a good fit for the directory at this time.
### Are there standards my MCP will need to adhere to for inclusion in the directory?
Yes, servers must adhere to the security, safety, and compatibility standards laid out in our [MCP Directory Policy](../22-Safety-Policy/anthropic-mcp-directory-policy.md). Adherence to these standards does not guarantee inclusion in the directory.
### I filled out the submission form but haven't heard back yet, how long will it take?
While we strive to review every submission as quickly as we can, due to overwhelming interest we cannot promise that we will accept your submission or respond to it individually.
## 1. Authentication and Authorization
### Is OAuth 2.0 required if we don't need user authentication?
OAuth 2.0 is only required if authentication is needed for the MCP server. Servers that do not require authentication do not require OAuth.
### Does Claude support machine-to-machine (client credentials) OAuth flow?
No. Pure client credentials flow (machine-to-machine OAuth with just client_id/client_secret and no user interaction) is not supported. We can provision a static client_id/client_secret for Claude, but users must still complete an OAuth consent flow to authenticate their individual accounts. This works on claude.ai and Claude Desktop, but not Claude Code because Claude Code establishes connections directly from user’s computer to your MCP server (and thus don’t have access to the static credentials).
### Can we identify individual users without implementing OAuth?
No. OAuth is the only way to uniquely identify users. We do not forward IP addresses, user IDs, or other metadata from end-users to MCP servers.
### Where does MCP server communication happen - client-side or Anthropic servers?
It depends on the product surface. Communication occurs through Anthropic servers (claude.ai, Claude Desktop), user's browser, or user's local clients (Claude Code). There is no centralized connection method across all surfaces currently.
### Can users authenticate with personal credentials from within a corporate Claude account?
Yes. Users authenticate with MCP servers on a per-server basis. They can use personal authentication credentials for MCP servers even when logged into claude.ai with a corporate account.
### Can we implement per-tool OAuth instead of per-server OAuth?
No. OAuth occurs when the client connects to the MCP server, not at the tool level. You can enforce tool-level permissions based on user authentication after server connection is established.
### When a user disconnects an MCP tool, are OAuth tokens revoked?
Tokens are removed from Anthropic's systems but not from your own systems. Access and refresh tokens at your identity provider remain valid until expiration, and session cookies are not cleared (as they are browser-level, outside Claude's control).
### How can our MCP service signal to Claude that a user's session is invalid?
Return a 401 Unauthorized response. To trigger full regeneration of DCR client credentials, return an invalid_client error as per RFC 6749 section 5.2.
### Are client_id/client_secret required for standard OAuth flows?
No. Client credentials are not required for standard OAuth flows with user authentication.
## 2. Rate Limiting and Abuse Prevention
### How can we implement per-user rate limiting without OAuth?
Per-user rate limiting requires OAuth. Without OAuth, your options are:
- Option 1: No authentication with global rate limiting
- Option 2: IP allowlisting using Claude's static IPs
### Can we use IP allowlisting to restrict MCP server access to Claude users only?
We strongly recommend using OAuth and not using IP allowlisting. However, this is possible using the static IP addresses available at [https://docs.claude.com/en/api/ip-addresses](https://docs.claude.com/en/api/ip-addresses).
Important limitations:
- Only works for claude.ai and Claude Desktop. Your MCP server will not work in Claude Code.
- Egress IPs could change - advanced notice of change will be posted in docs
- Not recommended as sole security measure, but okay to use when OAuth is not feasible
### Does Claude provide rate limiting or DDoS protection for MCP servers?
No. MCP server owners must implement their own rate limiting and abuse prevention measures.
## 3. Technical Limits and Constraints
### What is the maximum token size for MCP tool results?
25,000 tokens. Use pagination, filtering, or limit parameters to reduce response size if needed.
### What are the timeout limits for MCP tools?
Timeouts vary by component:
- Claude Code: Configurable via MCP_TOOL_TIMEOUT setting
- Claude.ai and Claude Desktop: 300 seconds (5 minutes)
## 4. Directory Submission and Requirements
### Which Claude plan types can access Connectors?
All users can access connectors, except for custom connectors, which are available for paid plans only (Pro, Max, Team, and Enterprise).
### Do we need a specific Claude plan to submit an MCP to the directory?
No. Any organization can submit to the directory regardless of plan type.
### Do we need to provide Anthropic with a test account?
If your server requires authentication / an account to use, we will need you to provide us with a testing account for initial QA purposes. Including dummy data in the account is also helpful to check functionality.
### How many tools should an MCP server provide?
No minimum or maximum requirement. We recommend that you start with a useful set of tools and expand capabilities over time.
### What are the performance requirements for MCP servers?
There are currently no specific SLA requirements. However, connectors with performance or reliability issues may be removed from the directory.
### What are the most common reasons MCP submissions are delayed or rejected?
Top issue: Missing tool annotations (30% of rejections)
Requirement: All tools MUST include readOnlyHint or destructiveHint
Impact: Immediate rejection, requires code changes.
Not optional: Compliance requirement per MCP Directory Policy
Example:
{
"name": "read_data",
"readOnlyHint": true
}
## 5. Data Privacy and Legal
### What telemetry does Anthropic collect from MCP tool calls?
Telemetry includes all parameters and data passed into tool calls as well as the response from MCP server.
### Is MCP data used for training Claude models?
We only train on consumer data when users explicitly opt in. See [https://www.anthropic.com/news/updates-to-our-consumer-terms](../19-Reference/updates-to-consumer-terms-and-privacy-policy-anthropic.md) for details. We do not train on Team/Enterprise plans.
### Can MCP servers identify which Claude SKU the user is on?
No. MCP servers cannot determine the Claude SKU being used.
### What does 'Data Processing Agreement URL' mean in the submission form?
Provide a URL to your company's data processing terms applicable to the MCP service. This does not need to be MCP-specific - your standard DPA is acceptable.
### Are connectors available globally? Can we restrict by geography?
Connectors are available to Claude users globally. Geographic restriction is not supported. You can guide the user and Claude’s understanding of any geographic limitations to your MCP description or tool descriptions if needed (e.g., 'only U.S. organizations available').
### Where can I find the MCP Directory Terms of Service and data policies?
Key resources:
- [MCP Directory Terms](../22-Safety-Policy/anthropic-mcp-directory-terms-and-conditions.md)
- [MCP Directory Policy](../22-Safety-Policy/anthropic-mcp-directory-policy.md)
### What are data protection (e.g. GDPR, CCPA, LGPD) compliance requirements for MCP servers?
MCP servers must handle compliance independently from Claude. If a user exercises a legal data protection right with your service, you must handle this on your end.
### Where must I include privacy policies for local connectors (desktop extensions)?
In your .mcpb, there are two required locations:
1\. README.md - Add a "Privacy Policy" section with URL or full text.
2\. manifest.json - Add privacy_policies array with HTTPS URLs (requires manifest_version 0.2+)
Example:
{
"manifest_version": "0.2",
"privacy_policies": ["https://your-domain.com/privacy"],
...
}
**Must cover:** What data is collected, how it's used/stored, third-party sharing, retention, and contact info. ⚠️ Missing privacy policy will lead to an immediate rejection.
## 6. User Experience and Branding
### How do we update our connector's icon?
We use the Google provided favicon, so you can customize your connector’s icon URL by updating the favicon for your connector URL. You can verify the icon that we will use at [https://www.google.com/s2/favicons?domain=\<YOUR_CONNECTOR_URL\>&sz=64](https://www.google.com/s2/favicons?domain=%3CYOUR_CONNECTOR_URL%3E&sz=64)
Be sure to test each favicon size (16, 32, 48, 64, 96, 128) by updating the &sz= portion of the URL.
**Remote connectors:**
- If using a custom icon URL: Update the icon at your provided URL.
- If relying on auto-detection: Icons are pulled from the Google-indexed favicon at your MCP server URL. Update your favicon and wait for Google to re-index.
Otherwise, provide us with a URL with the favicon you wish to use as your icon.
**Local connectors (desktop extensions):** Replace \`icon.png\` in your bundle and redistribute the updated \`.mcpb\` package to users.
### Does the connector descriptions in Claude support markdown?
Yes. Markdown formatting is supported in connector descriptions.
### Can we include account requirements and sign-up links in the connector details?
Yes. Please include account requirement language (e.g., 'free registered account required') and hyperlinks to sign-up pages in the connector details.
### How can we ensure users see our Terms of Service before connecting?
Implement an OAuth screen. This is the only way to guarantee TOS display. Without OAuth, users could theoretically add connectors to Claude Desktop by directly editing claude_desktop_config.json.
### Can we show consent language with TOS/Privacy Notice links during installation?
Include language in the connector description, but there is no special consent flow or popup. Use an OAuth screen to ensure users see and agree to terms.
## 7. Technical Implementation
### Is SSE transport acceptable, or must we use Streamable HTTP?
You must use Streamable HTTP.
### Can we add server-level descriptions or only tool-level descriptions?
Only tool-level descriptions are currently supported. No server-level description exists. This requires repeating steering guidance across individual tool descriptions. We recognize this is inconvenient and are exploring improvements.
### How do we make local MCP servers (.mcpb) available in Claude Code?
Use the [plugin marketplace](../08-Plugins-Skills/create-and-distribute-a-plugin-marketplace-claude-code-docs-34a8f3c5e8.md). Node.js is recommended over Python or other languages for local MCPs due to better compatibility with Claude Desktop's built-in runtime.
### What are the observability best practices for local MCPs in Claude Desktop?
Local MCPs can only log to ~/Library/Logs/Claude/mcp\*.log. Users must manually share log files for troubleshooting. Direct log transmission from local MCP servers is not supported due to security constraints.
## 8. Testing and Debugging
### IP allowlisting isn't working. How do we debug connection issues?
Temporarily remove the IP allowlist to verify other configuration is correct. If connection works without allowlist, the issue is with IP filtering configuration.
### What testing should we complete before submitting to the directory?
Essential testing prevents 80% of submission delays. See our guides for submitting remote and local connectors for best-practices and a pre-submission checklist.
## 9. Common Implementation Patterns
### What authentication approach should we use for our MCP?
Choose based on your security requirements and constraints:
***Option 1: No Auth + Global Rate Limiting***
Best for: Public data with low abuse risk
- Simplest implementation, works across all Claude surfaces
- No per-user rate limiting, accessible by public internet
- Can add IP allowlisting to restrict to Claude-only traffic
***Option 2: Full OAuth with User Registration***
Best for: Enterprise security, sensitive data, per-user rate limiting
- Most secure, works across all surfaces, full user identification
- Requires user registration system, more complex implementation
- Recommended approach for production systems
***Option 3: IP-allowlisting***
We strongly recommend Option 2 over Option 3, but if implementing OAuth is truly infeasible, you can still get some restricted access to Claude users only
- No ability to identify individual users, but restricts to requests from [claude.ai](http://claude.ai) and Claude Desktop.
- MCP server will not work with Claude Code
- Implementation: Use [Claude Static IPs](https://docs.claude.com/en/api/ip-addresses)
## 10. Key Resources
Important links:
- Claude Static IPs: [https://docs.claude.com/en/api/ip-addresses](https://docs.claude.com/en/api/ip-addresses)
- MCP Directory Submission Forms: [https://docs.google.com/forms/d/e/1FAIpQLSeafJF2NDI7oYx1r8o0ycivCSVLNq92Mpc1FPxMKSw1CzDkqA/viewform](https://docs.google.com/forms/d/e/1FAIpQLSeafJF2NDI7oYx1r8o0ycivCSVLNq92Mpc1FPxMKSw1CzDkqA/viewform)
- MCP Directory Terms: <https://support.claude.com/en/articles/11697081-anthropic-mcp-directory-terms-and-conditions>
- MCP Directory Policy: <https://support.claude.com/en/articles/11697096-anthropic-mcp-directory-policy>
- Training Opt-in Policy: [https://www.anthropic.com/news/updates-to-our-consumer-terms](../19-Reference/updates-to-consumer-terms-and-privacy-policy-anthropic.md)
- MCP Protocol Specification: [https://modelcontextprotocol.io](https://modelcontextprotocol.io)
- Local Desktop MCPB Bundling Utility: [https://github.com/anthropics/mcpb](https://github.com/anthropics/mcpb)
- MCPB Manifest Specification: [https://github.com/anthropics/mcpb/blob/main/MANIFEST.md](https://github.com/anthropics/mcpb/blob/main/MANIFEST.md)
- [Claude Desktop Release Notes](../19-Reference/release-notes.md)
---
## building-custom-connectors-via-remote-mcp-servers.md
3. Building custom connectors via remote MCP servers
# Building custom connectors via remote MCP servers
Updated today
Custom connectors using remote MCP are available on Claude, Cowork, and Claude Desktop for users on free, Pro, Max, Team, and Enterprise plans. Free users are limited to one custom connector. This feature is currently in beta.
## Building remote MCP servers
To get started with remote servers, start with the following resources:
- The [auth spec](../06-MCP-Tools/Spec-Archive/spec-2025-06-18-authorization-model-context-protocol.md), especially details on [the auth flow for third-party services](../06-MCP-Tools/Spec-Archive/spec-2025-03-26-authorization-model-context-protocol.md#2-10-third-party-authorization-flow).
- The remote server examples in the [TypeScript](https://github.com/modelcontextprotocol/typescript-sdk/tree/main/src/examples/server) and [Python](https://github.com/modelcontextprotocol/python-sdk/tree/main/examples/servers) SDKs.
- The client and server auth implementations in the [TypeScript](https://github.com/modelcontextprotocol/typescript-sdk/tree/main/src/server/auth) and [Python](https://github.com/modelcontextprotocol/python-sdk/tree/main/src/mcp) SDKs.
- The official MCP [roadmap](../06-MCP-Tools/Community/roadmap-model-context-protocol.md) and [draft spec’s changelog](../06-MCP-Tools/Spec/spec-draft-key-changes-model-context-protocol.md) for details on how the protocol will evolve.
Other resources (like [this](https://simplescraper.io/blog/how-to-mcp)) may also be helpful to learn about considerations when building, deploying, and troubleshooting remote servers.
In addition, some [solutions like Cloudflare](https://developers.cloudflare.com/agents/guides/remote-mcp-server/) provide remote MCP server hosting with built-in autoscaling, OAuth token management, and deployment.
## MCP support
### Platforms
- Remote MCP servers are supported on Claude and Claude Desktop for Pro, Max, Team, and Enterprise plans.
- To configure remote MCP servers for use in Claude Desktop, add them via [Settings \> Connectors](https://claude.ai/settings/connectors). Claude Desktop will not connect to remote servers that are configured directly via *claude_desktop_config.json*.
- As of July, Claude for iOS and Android also support remote MCP servers!
- Users can use tools, prompts, and resources from remote servers that they’ve already added via [claude.ai](http://claude.ai). Users cannot add new servers directly from Claude Mobile.
### Transport and auth
- Claude supports both SSE- and Streamable HTTP-based remote servers, although support for SSE may be deprecated in the coming months.
- Claude supports both authless and OAuth-based remote servers.
**Auth support**
- Claude supports the [3/26 auth spec](../06-MCP-Tools/Spec-Archive/spec-2025-03-26-authorization-model-context-protocol.md#1-introduction) and (as of July) the [6/18 auth spec](../06-MCP-Tools/Spec-Archive/spec-2025-06-18-authorization-model-context-protocol.md).
- Claude supports [Dynamic Client Registration](../06-MCP-Tools/Spec-Archive/spec-2025-03-26-authorization-model-context-protocol.md#2-4-dynamic-client-registration) (DCR).
- OAuth servers can signal to Claude that a DCR client has been deleted and that Claude should re-register the client by returning an HTTP 401 with an error of invalid_client from the token endpoint, as described in [RFC 6749](https://datatracker.ietf.org/doc/html/rfc6749#section-5.2).
- As of July, users are also able to specify a custom client ID and client secret when configuring a server that doesn’t support DCR.
- Claude’s OAuth callback URL is [https://claude.ai/api/mcp/auth_callback](https://claude.ai/api/mcp/auth_callback) and its OAuth client name is Claude.
- This callback URL may change to [https://claude.com/api/mcp/auth_callback](https://claude.com/api/mcp/auth_callback) in the future – if you choose to allowlist MCP client callback URLs, please allowlist this callback URL as well to ensure that your server continues to work with Claude.
- Claude supports token expiry and refresh – servers should support this functionality in order to provide the best experience for users.
See [here](https://docs.anthropic.com/en/api/ip-addresses#ipv4-2) for the IP addresses used by Claude for inbound and outbound connections to MCP servers. Server developers wishing to disallow non-Claude MCP Clients can whitelist these IP addresses, Claude’s OAuth callback URL, and/or Claude’s OAuth client name.
### Protocol Features
- Claude supports tools, prompts, and resources.
- Claude supports text- and image-based tool results.
- Claude supports text- and binary- based resources.
- Claude does not yet support resource subscriptions, sampling, and other more advanced or draft capabilities.
## Testing remote MCP servers
The best way to test and validate a server is to try [adding it to Claude](https://support.anthropic.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp#h_3d1a65aded).
Alternatively, use the [inspector tool](https://github.com/modelcontextprotocol/inspector). This will allow you to validate:
- that your server successfully initiates and completes the auth flow.
- that your server correctly implements various parts of the auth flow.
- which tools, prompts, resources, and other MCP features your server exposes.
See the [MCP documentation](../06-MCP-Tools/Tutorials/mcp-inspector-model-context-protocol.md) for more details on using inspector and for other tips on how to debug and troubleshoot your server.
In addition, other solutions like [Cloudflare’s AI Playground](https://playground.ai.cloudflare.com/) allow you to test remote MCP server functionality.
---
## claude-code-in-slack-claude-code-docs-c62a093e92.md
# Claude Code in Slack
Delegate coding tasks directly from your Slack workspace
> ## Documentation Index
>
> Fetch the complete documentation index at: <https://code.claude.com/docs/llms.txt>
>
> Use this file to discover all available pages before exploring further.
Claude Code in Slack brings the power of Claude Code directly into your Slack workspace. When you mention `@Claude` with a coding task, Claude automatically detects the intent and creates a Claude Code session on the web, allowing you to delegate development work without leaving your team conversations. This integration is built on the existing Claude for Slack app but adds intelligent routing to Claude Code on the web for coding-related requests.
Use cases
- **Bug investigation and fixes**: Ask Claude to investigate and fix bugs as soon as they’re reported in Slack channels.
- **Quick code reviews and modifications**: Have Claude implement small features or refactor code based on team feedback.
- **Collaborative debugging**: When team discussions provide crucial context (e.g., error reproductions or user reports), Claude can use that information to inform its debugging approach.
- **Parallel task execution**: Kick off coding tasks in Slack while you continue other work, receiving notifications when complete.
Prerequisites
Before using Claude Code in Slack, ensure you have the following:
| Requirement | Details |
|:-----------------------|:--------------------------------------------------------------------------------------------------|
| Claude Plan | Pro, Max, Team, or Enterprise with Claude Code access (premium seats or Chat + Claude Code seats) |
| Claude Code on the web | Access to [Claude Code on the web](/docs/en/claude-code-on-the-web) must be enabled |
| GitHub Account | Connected to Claude Code on the web with at least one repository authenticated |
| Slack Authentication | Your Slack account linked to your Claude account via the Claude app |
Setting up Claude Code in Slack
1
Install the Claude App in Slack
A workspace administrator must install the Claude app from the Slack App Marketplace. Visit the [Slack App Marketplace](https://slack.com/marketplace/A08SF47R6P4) and click “Add to Slack” to begin the installation process.
2
Connect your Claude account
After the app is installed, authenticate your individual Claude account:
1. Open the Claude app in Slack by clicking on “Claude” in your Apps section
2. Navigate to the App Home tab
3. Click “Connect” to link your Slack account with your Claude account
4. Complete the authentication flow in your browser
3
Configure Claude Code on the web
Ensure your Claude Code on the web is properly configured:
- Visit [claude.ai/code](https://claude.ai/code) and sign in with the same account you connected to Slack
- Connect your GitHub account if not already connected
- Authenticate at least one repository that you want Claude to work with
4
Choose your routing mode
After connecting your accounts, configure how Claude handles your messages in Slack. Navigate to the Claude App Home in Slack to find the **Routing Mode** setting.
| Mode | Behavior |
|:----------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Code only** | Claude routes all @mentions to Claude Code sessions. Best for teams using Claude in Slack exclusively for development tasks. |
| **Code + Chat** | Claude analyzes each message and intelligently routes between Claude Code (for coding tasks) and Claude Chat (for writing, analysis, and general questions). Best for teams who want a single @Claude entry point for all types of work. |
In Code + Chat mode, if Claude routes a message to Chat but you wanted a coding session, you can click “Retry as Code” to create a Claude Code session instead. Similarly, if it’s routed to Code but you wanted a Chat session, you can choose that option in that thread.
5
Add Claude to channels
Claude is not automatically added to any channels after installation. To use Claude in a channel, invite it by typing `/invite @Claude` in that channel. Claude can only respond to @mentions in channels where it has been added.
How it works
Automatic detection
When you mention @Claude in a Slack channel or thread, Claude automatically analyzes your message to determine if it’s a coding task. If Claude detects coding intent, it will route your request to Claude Code on the web instead of responding as a regular chat assistant. You can also explicitly tell Claude to handle a request as a coding task, even if it doesn’t automatically detect it.
Claude Code in Slack only works in channels (public or private). It does not work in direct messages (DMs).
Context gathering
**From threads**: When you @mention Claude in a thread, it gathers context from all messages in that thread to understand the full conversation. **From channels**: When mentioned directly in a channel, Claude looks at recent channel messages for relevant context. This context helps Claude understand the problem, select the appropriate repository, and inform its approach to the task.
When @Claude is invoked in Slack, Claude is given access to the conversation context to better understand your request. Claude may follow directions from other messages in the context, so users should make sure to only use Claude in trusted Slack conversations.
Session flow
1. **Initiation**: You @mention Claude with a coding request
2. **Detection**: Claude analyzes your message and detects coding intent
3. **Session creation**: A new Claude Code session is created on claude.ai/code
4. **Progress updates**: Claude posts status updates to your Slack thread as work progresses
5. **Completion**: When finished, Claude @mentions you with a summary and action buttons
6. **Review**: Click “View Session” to see the full transcript, or “Create PR” to open a pull request
User interface elements
App Home
The App Home tab shows your connection status and allows you to connect or disconnect your Claude account from Slack.
Message actions
- **View Session**: Opens the full Claude Code session in your browser where you can see all work performed, continue the session, or make additional requests.
- **Create PR**: Creates a pull request directly from the session’s changes.
- **Retry as Code**: If Claude initially responds as a chat assistant but you wanted a coding session, click this button to retry the request as a Claude Code task.
- **Change Repo**: Allows you to select a different repository if Claude chose incorrectly.
Repository selection
Claude automatically selects a repository based on context from your Slack conversation. If multiple repositories could apply, Claude may display a dropdown allowing you to choose the correct one.
Access and permissions
User-level access
| Access Type | Requirement |
|:---------------------|:----------------------------------------------------------------|
| Claude Code Sessions | Each user runs sessions under their own Claude account |
| Usage & Rate Limits | Sessions count against the individual user’s plan limits |
| Repository Access | Users can only access repositories they’ve personally connected |
| Session History | Sessions appear in your Claude Code history on claude.ai/code |
Workspace-level access
Slack workspace administrators control whether the Claude app is available in their workspace:
| Control | Description |
|:-----------------------------|:------------------------------------------------------------------------------------------------------------------|
| App installation | Workspace admins decide whether to install the Claude app from the Slack App Marketplace |
| Enterprise Grid distribution | For Enterprise Grid organizations, organization admins can control which workspaces have access to the Claude app |
| App removal | Removing the app from a workspace immediately revokes access for all users in that workspace |
Channel-based access control
Claude is not automatically added to any channels after installation. Users must explicitly invite Claude to channels where they want to use it:
- **Invite required**: Type `/invite @Claude` in any channel to add Claude to that channel
- **Channel membership controls access**: Claude can only respond to @mentions in channels where it has been added
- **Access gating through channels**: Admins can control who uses Claude Code by managing which channels Claude is invited to and who has access to those channels
- **Private channel support**: Claude works in both public and private channels, giving teams flexibility in controlling visibility
This channel-based model allows teams to restrict Claude Code usage to specific channels, providing an additional layer of access control beyond workspace-level permissions.
What’s accessible where
**In Slack**: You’ll see status updates, completion summaries, and action buttons. The full transcript is preserved and always accessible. **On the web**: The complete Claude Code session with full conversation history, all code changes, file operations, and the ability to continue the session or create pull requests. For Enterprise and Team accounts, sessions created from Claude in Slack are automatically visible to the organization. See [Claude Code on the Web sharing](/docs/en/claude-code-on-the-web#share-sessions) for more details.
Best practices
Writing effective requests
- **Be specific**: Include file names, function names, or error messages when relevant.
- **Provide context**: Mention the repository or project if it’s not clear from the conversation.
- **Define success**: Explain what “done” looks like—should Claude write tests? Update documentation? Create a PR?
- **Use threads**: Reply in threads when discussing bugs or features so Claude can gather the full context.
When to use Slack vs. web
**Use Slack when**: Context already exists in a Slack discussion, you want to kick off a task asynchronously, or you’re collaborating with teammates who need visibility. **Use the web directly when**: You need to upload files, want real-time interaction during development, or are working on longer, more complex tasks.
Troubleshooting
Sessions not starting
1. Verify your Claude account is connected in the Claude App Home
2. Check that you have Claude Code on the web access enabled
3. Ensure you have at least one GitHub repository connected to Claude Code
Repository not showing
1. Connect the repository in Claude Code on the web at [claude.ai/code](https://claude.ai/code)
2. Verify your GitHub permissions for that repository
3. Try disconnecting and reconnecting your GitHub account
Wrong repository selected
1. Click the “Change Repo” button to select a different repository
2. Include the repository name in your request for more accurate selection
Authentication errors
1. Disconnect and reconnect your Claude account in the App Home
2. Ensure you’re signed into the correct Claude account in your browser
3. Check that your Claude plan includes Claude Code access
Session expiration
1. Sessions remain accessible in your Claude Code history on the web
2. You can continue or reference past sessions from [claude.ai/code](https://claude.ai/code)
Current limitations
- **GitHub only**: Currently supports repositories on GitHub.
- **One PR at a time**: Each session can create one pull request.
- **Rate limits apply**: Sessions use your individual Claude plan’s rate limits.
- **Web access required**: Users must have Claude Code on the web access; those without it will only get standard Claude chat responses.
Related resources
## Claude Code on the web
Learn more about Claude Code on the web
## Claude for Slack
General Claude for Slack documentation
## Slack App Marketplace
Install the Claude app from the Slack Marketplace
## Claude Help Center
Get additional support
---
## enabling-and-using-the-microsoft-365-connector.md
4. Enabling and using the Microsoft 365 connector
# Enabling and using the Microsoft 365 connector
The Microsoft 365 connector is available for users on Team and Enterprise plans.
This article explains how to connect Claude to Microsoft 365 using our pre-built MCP connector, allowing Claude to search, analyze, and access information across SharePoint, OneDrive, Outlook, and Teams.
With Microsoft 365 connected, Claude can:
- **Search and analyze documents** across SharePoint sites and OneDrive libraries
- **Access email threads** and analyze communications from Outlook
- **Review meeting information** from Teams Calendar
- **Pull insights** from Teams Chat discussions
## Enabling the Microsoft 365 connector
Enabling the Microsoft 365 connector for your organization requires two separate setup phases with specific steps that must be completed by a Microsoft Entra ID Global Administrator, and a Claude Team or Enterprise plan Owner.
**Prerequisites for enablement:**
- A Claude user with an Owner or Primary Owner role on a Team or Enterprise organization
- Someone with Global Administrator access to your organization's Microsoft Entra tenant
- Users must have Microsoft 365 accounts to connect to the connector and start using it with Claude.
### Phase 1: Initial Microsoft Entra Global Administrator Setup
A Microsoft Entra Global Administrator must complete a one-time setup process before Claude Team and Enterprise plan users can connect to the Microsoft 365 connector.
**Automatic Setup through Auth Consent Flow (Recommended)**
This process triggers an auth consent flow when connecting to the Microsoft 365 connector for the first time as a Global Administrator.
**Steps:**
**1) Enable in Claude organization settings**
As an organization Owner and Microsoft Entra Global Administrator:
1. Sign in to Claude.
2. Navigate to **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
3. Click the “Browse connectors” button at the bottom of the page.
4. Find "Microsoft 365" and click "Add to your team."
“Microsoft 365” will now appear in the list of Connectors at **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
**2) Enable in individual Claude Settings**
After completing the previous step on behalf of the Claude organization, the Microsoft Entra Global Administrator needs to connect to Microsoft 365 in their individual Claude user settings:
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Find "Microsoft 365" in the list and click "Connect."
3. Authenticate with your Microsoft 365 credentials.
4. You can then review and accept the requested permissions, checking the box to grant access on behalf of the whole organization.
- You must complete this step before any team members can connect to Microsoft 365 individually.
5. (Optional) **To restrict which users in your Microsoft Entra tenant can use the connector**, navigate to the M365 MCP Server for Claude enterprise application in the Entra admin center (**[https://entra.microsoft.com](https://entra.microsoft.com)**), go to Properties and set “Assignment required?” to Yes, then add the specific users or groups under the Users and groups section—only those assigned will be able to authenticate and use the connector. Repeat this same process for the M365 MCP Client for Claude enterprise application to ensure both components are restricted to the same set of authorized users.
6. (Optional) **To selectively restrict which permissions scopes users in your tenant can use** see the below “Permission categories” and “Selectively revoking permissions” sections.
**Manual Setup in Microsoft Entra ID**
Alternatively, you can add the connector apps and grant admin pre-consent on behalf of the whole tenant in Microsoft Entra ID. This process manually achieves what is done above in the Automatic Setup through Auth Consent Flow section above. You can use this method if your Microsoft Entra Global Administrator is not a member of the Claude Team or Enterprise organization or to troubleshoot the app install and permissions setup in Microsoft Entra ID.
This process adds two service principals to Graph Explorer; each principal establishes a service-level identity for one of the two M365 MCP for Claude app registrations in your tenant, allowing them to access and interact with your organization's data and resources via the Microsoft Graph API.
**Steps:**
**1) Add the service principals**
Using [Microsoft Graph Explorer](https://developer.microsoft.com/en-us/graph/graph-explorer), add both required service principals:
M365 MCP Client for Claude
POST [https://graph.microsoft.com/v1.0/servicePrincipals](https://graph.microsoft.com/v1.0/servicePrincipals)
{"appId":"08ad6f98-a4f8-4635-bb8d-f1a3044760f0"}
M365 MCP Server for Claude
POST [https://graph.microsoft.com/v1.0/servicePrincipals](https://graph.microsoft.com/v1.0/servicePrincipals)
{"appId":"07c030f6-5743-41b7-ba00-0a6e85f37c17"}
**2) Grant admin pre-consent**
Construct and visit the following URLs in your browser, replacing {your-tenant-id} with your organization's tenant ID:
**M365 MCP Client for Claude**
[https://login.microsoftonline.com/{your-tenant-id}/adminconsent?client_id=08ad6f98-a4f8-4635-bb8d-f1a3044760f0](https://login.microsoftonline.com/%7Byour-tenant-id%7D/adminconsent?client_id=08ad6f98-a4f8-4635-bb8d-f1a3044760f0)
**M365 MCP Server for Claude**
[https://login.microsoftonline.com/{your-tenant-id}/adminconsent?client_id=07c030f6-5743-41b7-ba00-0a6e85f37c17](https://login.microsoftonline.com/%7Byour-tenant-id%7D/adminconsent?client_id=07c030f6-5743-41b7-ba00-0a6e85f37c17)
When you visit each URL, you'll be prompted to consent to the delegated user permissions required by the integration on behalf of your organization.
**3) Enable in Claude organization settings**
After the Microsoft Entra Admin completes the admin consent process, an organization Owner needs to:
1. Sign in to Claude.
2. Navigate to **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
3. Click the “Browse connectors” button at the bottom of the page.
4. Find "Microsoft 365" and click "Add to your team."
“Microsoft 365” will now appear in the list of Connectors at **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
**4) Enable in individual Claude Settings**
After completing the previous step on behalf of the organization, the Microsoft Entra Admin needs to connect to Microsoft 365 in their individual Claude user settings:
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Find "Microsoft 365" in the list and click "Connect."
3. Authenticate with your Microsoft 365 credentials.
4. You can then review and accept the requested permissions, checking the box to grant access on behalf of the whole organization.
- You must complete this step before any team members can connect to Microsoft 365 individually.
5. (Optional) **To restrict which users in your Microsoft Entra tenant can use the connector**, navigate to the M365 MCP Server for Claude enterprise application in the Entra admin center (**[https://entra.microsoft.com](https://entra.microsoft.com)**), go to Properties and set “Assignment required?” to Yes, then add the specific users or groups under the Users and groups section—only those assigned will be able to authenticate and use the connector. Repeat this same process for the M365 MCP Client for Claude enterprise application to ensure both components are restricted to the same set of authorized users.
6. (Optional) **To selectively restrict which permissions scopes users in your tenant can use** see the below “Permission categories” and “Selectively revoking permissions” sections.
**5) Test the connector**
After you connect successfully, start a new chat with Claude and try making a simple request (e.g., “List all of my SharePoint docs”). If Claude can access the requested data using the Microsoft 365 connection, this confirms the connector is working. All Claude organization members can start authenticating with and using the Microsoft 365 connector.
### Phase 2: Enablement steps for Team and Enterprise users
Once enabled by an Owner, members can choose to connect Claude to Microsoft 365 in their settings.
**Steps:**
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Find "Microsoft 365" in the list and click "Connect."
3. Authenticate with your Microsoft 365 credentials to start using the Microsoft 365 connector with Claude.
**Note:** Once you've added the Microsoft connector to your Claude account, you can authenticate with the tool and use it on Claude for iOS or Android.
------------------------------------------------------------------------
## How to use the Microsoft 365 connector
Ask Claude a question that requires accessing your Microsoft 365 data. Claude will automatically detect which tools it needs and retrieve the relevant information.
### Example queries
- "Find the Q4 strategic planning document in SharePoint."
- "Summarize email conversations about the product launch."
- "What discussions happened in the Teams channel about the marketing campaign?"
- "Review meeting notes from last week's leadership sync."
Claude will provide a response based on information retrieved from your Microsoft 365 environment, including relevant context and citations when applicable.
## SharePoint and OneDrive document access
- Search documents across SharePoint sites and libraries to locate project specifications, strategic plans, and other business documents.
- Access files stored in your OneDrive and have Claude analyze content without manually uploading.
- Consolidate information from distributed file locations and analyze trends across multiple documents.
## Outlook email analysis
- Search email threads and conversations to track project status, client feedback, and team alignment.
- Access message content and metadata, filtering by date, sender, subject, and other criteria.
- Analyze communication patterns and find specific information from past correspondences.
## Outlook Calendar meeting analysis and summarization
- Review meeting summaries, attendee information, and content to prepare for upcoming meetings or understand discussions you missed.
- Analyze scheduling patterns and track project decisions.
## Teams chat capabilities
- Access Teams chat messages and channel discussions where you're a participant.
- Review team collaboration patterns and find decisions made across conversations.\
------------------------------------------------------------------------
## Which permissions does the Microsoft 365 Connector require?
When you connect the Microsoft 365 integration, you'll be asked to grant several permissions that allow Claude to access your Microsoft 365 data on your behalf.
**Important to understand:**
- All permissions are **delegated permissions**, which means Claude acts on behalf of the user’s Microsoft 365 account and can only access data they already have permission to view in Microsoft 365.
- Claude can only access Microsoft 365 data for the account you've connected.
- Claude cannot access anything beyond your existing permissions.
- These permissions enable read-only access—Claude cannot modify, delete, or create content in your Microsoft 365 tenant.
## Permission categories
During authentication, the Microsoft 365 connector requests the following permissions:
**Basic access**
- **User.Read**: Sign in and read your user profile
- **openid: Sign in with your organizational account**
- **offline_access: Maintain access to data you have given it access to**
- **email: View your email address**
- **profile: View your basic profile information**
**Email (Outlook)**
- **Mail.Read**: Read your email messages
- **Mail.ReadBasic**: Read email metadata (sender, subject, date)
- **Mail.Read.Shared**: Read emails in mailboxes you have access to
- **MailboxFolder.Read**: Read your mailbox folder structure
- **MailboxItem.Read**: Read items in your mailbox
**Calendar**
- **Calendars.Read**: Read your calendar events
- **Calendars.Read.Shared**: Read calendars shared with you
**Teams Chat**
- **Chat.Read**: Read your Teams chat messages
- **Chat.ReadBasic**: Read Teams chat metadata
- **ChatMember.Read**: Read information about chat participants
- **ChatMessage.Read**: Read your Teams chat messages
**Teams Channels**
- **Channel.ReadBasic.All**: Read channel names and descriptions
- **ChannelMessage.Read.All**: Read channel messages
**Meetings**
- **OnlineMeetings.Read**: Read your online meetings
- **OnlineMeetingTranscript.Read.All**: Read meeting transcripts
- **OnlineMeetingAiInsight.Read**: Read AI-generated meeting insights
- **OnlineMeetingArtifact.Read.All**: Read meeting recordings and artifacts
- **OnlineMeetingRecording.Read.All**: Read meeting recordings
**Files (OneDrive and SharePoint)**
- **Files.Read**: Read your files
- **Files.Read.All**: Read all files you can access
- **Sites.Read.All**: Read items in SharePoint sites
**User Directory**
- **User.ReadBasic.All**: Read basic profile information for all users in your organization (used for finding meeting availability)
## Why are these permissions needed?
These permissions allow Claude to do the following when prompted:
- Search your emails, documents, and calendar to answer your questions.
- Access meeting information and Teams discussions.
- Find and analyze content across your Microsoft 365 environment.
- Provide accurate, contextual responses based on your work data.
Additionally, the Microsoft 365 Connector searches SharePoint across the entire tenant using the permissions of the user. Site-specific search restriction is unsupported.
You can revoke these permissions as a user at any time by disconnecting the connector in your Claude settings, or as an organization by removing the connector in your Claude organization settings.
## Selectively revoking permissions
To limit which types of resources the connector is able to access, you can selectively revoke permissions from the default set of authorized scopes the connector uses to access the Microsoft Graph API.
1. As a Microsoft Entra Admin, go to: entra.admin.com
2. Select “Enterprise Applications.”
3. Next to the search box, remove the application type filter.
4. Search for and click "M365 MCP Server for Claude."
5. Go to Permissions.
6. Under the Admin consent tab and in the Microsoft Graph list of permissions, select the permission you would like to revoke and click the breadcrumbs button (“...”).
7. Select “Revoke permission,” and confirm with the “Yes, revoke” button.
8. Claude will now be unable to access resources via that API. Attempts to access a resource with a revoked permission will show a "Failed to call tool \<name of tool\>".
9. As a convenience, users can also individually toggle off which tools the connector will use in the Microsoft 365 connector settings to prevent Claude from trying to access a tool for which the permission is revoked.
To restore a revoked permission, follow the steps to grant admin pre-consent described in **[Phase 1: Initial Microsoft Admin Setup](#h_f93cbae211)**. This will revert the permissions to the default state.
## Privacy and security
- **Permission inheritance:** Claude mirrors your existing Microsoft 365 permissions.
- **On-demand access:** Claude only accesses your data when you explicitly ask questions requiring it.
- **Revocable access:** You can disconnect the integration at any time through **[Settings \> Connectors](https://claude.ai/settings/integrations)**.
Read more here: **[Microsoft 365 Connector: Security Guide](microsoft-365-connector-security-guide.md)**.\
------------------------------------------------------------------------
## Troubleshooting
### Authentication is failing. What should I check?
1. **Verify your credentials:** Ensure you're using the correct Microsoft 365 account.
2. **Check subscription status:** Confirm your Microsoft 365 license is active.
3. **Review organizational policies:** Your IT team may need to approve third-party app access.
4. **Try a different browser:** Some browsers may block authentication popups.
5. **Disable browser extensions:** Ad blockers or privacy extensions may interfere.
6. **Clear cookies and cache:** Try a fresh browser session.
### Claude says it can't find documents I know exist
Check the following:
1. **Permissions:** Verify you have access to the document in Microsoft 365 directly.
2. **Location:** Ensure the document is in SharePoint or OneDrive, not local storage.
3. **Indexing delay:** Recently uploaded documents may take time to become searchable.
4. **Specific location:** Try specifying the exact SharePoint site or library name.
5. **File name:** Try searching by exact file name or unique keywords from the document.
### Search results are incomplete or irrelevant
Tips to improve your search queries:
- Be more specific about what you're looking for.
- Specify locations (site names, date ranges, document types).
- Use exact phrases for better matching.
- Try breaking up complex queries into simpler, more focused questions.
- Verify spelling of names, projects, or terms.\
------------------------------------------------------------------------
## Frequently asked questions
### Can Claude modify my Microsoft 365 data?
No. The current Microsoft 365 integration provides **read-only access**. Claude can search and analyze your data but cannot:
- Create, edit, or delete documents
- Send emails or calendar invites
- Modify SharePoint sites or OneDrive files
- Change Teams settings or permissions
### Can I use the Microsoft 365 Connector with Enterprise Search?
Yes, the Microsoft 365 Connector works well with **[Enterprise Search](../13-Enterprise-Admin/using-enterprise-search.md)**. When enabled:
1. Enterprise Search can query Microsoft 365 alongside other connected tools.
2. You get unified search across Slack, Google Workspace, Microsoft 365, and more.
3. Enterprise Search's optimized prompts help Claude search more effectively.
### Can Claude search archived emails?
Yes, Claude can search all emails you have access to in Outlook, including archived messages, as long as they're accessible through your account.
### Does Claude search shared drives and team sites?
Yes, Claude can search any SharePoint sites and shared drives you have permission to access. This includes:
- Team sites
- Communication sites
- SharePoint document libraries
- Shared OneDrive folders
### Can Claude access private Teams channels?
Claude can only access Teams content that you have permission to view in Microsoft 365. If you're a member of a private channel, Claude can search for that content. If you're not a member, Claude cannot access it.
### How do I ask Claude to search specific locations?
Be specific in your queries:
- **For specific SharePoint sites:** "Search the Engineering team site in SharePoint for architecture documents."
- **For specific date ranges:** "Find emails from the last week about the Q4 budget."
- **For specific senders or topics:** "Show me Teams discussions with Sarah about the product roadmap."
- **For specific file types:** "Find PowerPoint presentations in SharePoint about sales strategy."
### Can Claude summarize long email threads?
Yes. One of Claude's strengths is analyzing and summarizing complex communications. Try: "Summarize the email thread about the vendor selection process." Claude will read the thread and provide a concise summary with key points and decisions.
### What happens if a Microsoft 365 user tries to connect before a MicrosoftEntra Global Admininstrator grants tenant-wide permission?
If a user without Microsoft Entra Global Administrator permissions attempts to connect their Microsoft 365 account, they will receive an error message indicating that an Administrator must grant app permissions before they can use the connector. The connection attempt will fail until a Microsoft Entra Global Administrator approves the necessary permissions as detailed above in Phase 1.
---
## get-started-with-custom-connectors-using-remote-mcp.md
# Get started with custom connectors using remote MCP
Updated today
Custom connectors using remote MCP are available on Claude, Cowork, and Claude Desktop for users on free, Pro, Max, Team, and Enterprise plans. Free users are limited to one custom connector. This feature is currently in beta.
## What are custom connectors?
Custom connectors let you connect Claude directly to the tools and data sources that matter most to your workflows. This enables Claude to operate within your favorite software and draw insights from the complete context of your external tools.
You can:
- Connect Claude to existing remote MCP servers.
- Build your own remote MCP servers to connect with any tool.
**⚠️ Security and Privacy with Custom Connectors (beta)**
Be aware that custom connectors allow you to connect Claude to services that have not been verified by Anthropic, and allow Claude to access and take action in these services. For more guidance, review the **[Security and privacy considerations](#h_9088ccdf4d)** section below.
## What are remote MCP servers?
The Model Context Protocol (MCP) is an open standard, created by Anthropic, for AI applications to connect to tools and data.
Previously, **[MCP servers only ran locally](https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop)** (i.e. on a user's laptop). Now, developers can build and host remote MCP servers that communicate with AI apps over the internet.
Remote MCP servers give models access to internet-hosted tools and data, transforming Claude into an informed teammate that can independently handle complex, multi-step projects tailored to your needs.
## Add a custom connector
**Note:** While anyone can build and host connectors using remote MCP, only Owners can add them to Team and Enterprise plans. Once a connector has been added to a Team or Enterprise organization, users individually connect to and enable that connector. This ensures that Claude can only access tools and data that the individual user has access to.
### For Team and Enterprise plans
**Preliminary steps for owners:**
Before members of Team and Enterprise plans can configure custom connectors, an Owner or Primary Owner needs to follow these initial steps to add a custom connector to your organization:
1. Navigate to **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
2. Click "Add custom connector" at the bottom of the section.
3. Add your connector's remote MCP server URL.
4. Optionally, click “Advanced settings” to specify an OAuth Client ID and OAuth Client Secret for your server.
5. Finish configuring your connector by clicking "Add."
**Steps for members after connector is configured:**
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Locate the "Connectors" section.
3. Find the custom connector your Owner added in the list (it will have a "Custom" label).
4. Click "Connect" to authenticate and start using the connector with Claude.
### For Pro and Max plans
If you are using an individual Pro or Max plan, follow these steps to add a custom connector:
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Locate the "Connectors" section.
3. Click "Add custom connector" at the bottom of the section.
4. Add your connector's remote MCP server URL.
5. Optionally, click “Advanced settings” to specify an OAuth Client ID and OAuth Client Secret for your server.
6. Finish configuring your connector by clicking "Add."
### Enabling connectors after configuration
You can enable connectors for individual conversations via the “+” button on the lower left of your chat interface, then "Connectors." You'll see your configured connectors with toggles allowing you to enable/disable them per conversation.
## How to remove connectors
You can remove a custom connector by following these steps:
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**
1. Team and Enterprise Owners can do this on their organization's behalf in **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**
2. Locate the "Connectors" section.
3. Click "Remove" or select the three dots next to the connector you'd like to remove.
4. Follow the prompts to remove.
If you're hoping to edit a custom connector, you'll need to remove it first, then re-add it using the updated details.
## How to build custom connectors
To learn about building connectors to use with Claude, see Building custom connectors via remote MCP servers.
## Security and privacy considerations
Custom connectors allow you to connect Claude to arbitrary services that have not been verified by Anthropic. When you connect Claude to external services, you're granting it the ability to access and potentially modify data within those services based on your permissions. It’s important to make sure you’re only connecting to remote MCP servers that you trust and that you’re aware of Claude’s interactions with web connectors.
### Security and permissions
When you add a custom connector to Claude, you'll typically go through an OAuth authentication process to securely sign in to the application and grant specific permissions. This allows Claude to interact with the application on your behalf, without Claude ever seeing your actual password. You can revoke these permissions at any time by disconnecting the connector in Claude's settings or the third-party service's security settings.
Remote MCP servers act as intermediaries between Claude and external applications. You should:
- **Only connect to trusted servers:** Only connect Claude to servers built and hosted by organizations and applications you trust.
- **Review requested permissions carefully:** During auth, review what permissions the MCP server is requesting to the application. Limit these scopes when possible and deny access if requested permissions seem unnecessary.
- **Be aware of prompt injections:** Malicious MCP servers may include hidden instructions that try to make Claude perform unintended actions. Claude has built-in protections that attempt to block these attacks, but it's important to pay attention to tool inputs & outputs and connect only to trusted servers.
- **Monitor changes in tool behavior:** Server developers may update tool behavior unexpectedly, leading to unintended or malicious behavior.
### Reporting malicious MCP servers
If you become aware of a malicious MCP server, please report it to our **[vulnerability disclosure program](https://hackerone.com/anthropic-vdp/)**, and choose [`https://github.com/modelcontextprotocol`](https://github.com/modelcontextprotocol) as the Asset.
### Taking actions with tools
Remote MCP servers give Claude tools it can invoke during your conversation. The developer of an MCP server can define what these tools do, including:
- Reading data from connected applications.
- Creating, modifying, or deleting data in connected applications.
- Taking actions on behalf of the user.
Claude can only access resources that you've given the server permission to access, but you should:
- Be aware of any actions Claude is taking and that they have no destructive or unintended effects.
- Review Claude's tool approval requests carefully and only click "Allow always" when using a server and tool that you trust to run unsupervised.
- Using the "Search and tools" menu, disable any tools that aren't relevant to the current conversation or that you don't want Claude to be able to invoke.
### Interactive connectors
Some connectors can display interactive interfaces directly within your Claude conversations. Instead of only returning text-based responses, these connectors can open live, interactive apps — like dashboards, task boards, or design tools — right in the chat.
Interactive connectors appear in two ways:
- **Inline cards:** Compact components embedded in the conversation, showing summaries, confirmations, or quick actions.
- **Fullscreen view:** Immersive interfaces for complex interactions like data visualizations or document editing. The conversation composer remains available so you can continue chatting with Claude.
You can interact with these connectors directly — filtering data, checking off tasks, adjusting settings — without leaving the conversation. Any actions you take within the interface use the same permissions you granted when connecting the tool.
**Admin controls:** Team and Enterprise plan owners can disable specific tool calls that render interactive connectors within **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
### Using Claude with Research
**Note:** **[Advanced Research](https://claude.com/blog/integrations)** is not currently able to invoke tools from local MCP servers.
Research allows Claude to deeply investigate queries by searching through hundreds of internal and external sources. During the research process, Claude can invoke tools from your connectors automatically without further approval.
When using Research with custom connectors:
- Disable any tools that can take write actions in external applications.
- Review Claude’s approval request carefully and be aware of which tools you’re granting Claude permission to invoke.
- Be mindful of the impact of Claude sending a large number of requests to your connectors.
See **[Using Research on Claude](../15-Claude-AI-Features/using-research-on-claude.md)** for more information about this feature.
---
## getting-started-with-claude-in-slack.md
# Getting started with Claude in Slack
You can now integrate Claude and Slack, giving you two ways to use them together: add Claude directly to your Slack workspace, or enable the Slack connector for your Claude apps.
## What is Claude in Slack?
The Claude app is available to users on paid Slack plans. Slack admins must approve the Claude app before individual users can access it.
It’s how we’ve brought Claude’s capabilities directly to Slack, bringing AI assistance into your team’s workspace. This integration allows you to work with Claude without leaving Slack through three convenient surfaces:
**Direct message with Claude**: Start a private conversation with @Claude.
**AI assistant panel**: Click the Claude icon in Slack's AI assistant header to open a panel on the right side of your Slack window, allowing you to access Claude from anywhere in the Slack app.
**Thread participation**: Mention @Claude in any thread to get Claude's help with the conversation.
All surfaces provide the same capabilities that you have enabled in Claude, including web search and connections to your integrated tools, allowing you to seamlessly integrate AI assistance into your existing workflow.
**Note:** Team and Enterprise plan users with access to Claude Code on the web can also route coding tasks directly to Claude Code by mentioning @Claude. See [Using Claude in Slack](using-claude-in-slack.md#h_adda66b697) for details on this beta feature.
------------------------------------------------------------------------
## Enabling and installing Claude in Slack
### For Slack admins
1. Go to the [Claude app in the Slack App Marketplace](https://slack.com/marketplace/A08SF47R6P4).
2. Click "Add to Slack" on the Claude app page.
3. Review and approve the app for your organization.
4. Choose whether to deploy org-wide or to specific workspaces.
**To install across all workspaces:**
1. Navigate to your Slack management workspace at: [https://app.slack.com/manage/\<INSERT_SLACK_ID\>/workspaces/all](https://app.slack.com/manage/%3CINSERT_SLACK_ID%3E/workspaces/all)
- Find your enterprise's Slack ID using the appropriate lookup method
2. Navigate to **Integrations → Installed apps → Add to more workspaces**.
3. Toggle through all relevant workspaces where you'd like to enable Claude.
### For individual users
Once your Slack admin has approved Claude (or if you're on a personal Slack plan):
1. Find Claude in your apps list (search for "Claude" if it's not immediately visible), or go to the Slack App Marketplace.
2. Click "Connect Account” to be prompted to connect your Claude account:
3. In the window that opens, select which organization you would like to connect with Claude for Slack.
4. Click “Authorize” to allow Claude in Slack to access your Claude chat account:
5. You should see a confirmation message upon successful connection:
6. After successful authentication, return to Slack.
7. Click “+ New Chat” to start a conversation with Claude, or @mention Claude in any Slack conversation to access its capabilities.
**Tip**: Add Claude to your Slack header for quick access by clicking the three dots "..." at the top right and selecting "Add this app to header."
**Enabling Claude Code in Slack (beta)**
Team and Enterprise plan users can route coding tasks from Slack to Claude Code on the web. To enable this capability:
1. A Claude Owner or Primary Owner must enable Claude Code on the web by navigating to **[Organization settings \> Claude Code](http://claude.ai/admin-settings/claude-code)**.
2. Individual users must have access to Claude Code on the web.
Once enabled, mentioning @Claude for coding tasks will automatically create a Claude Code session. Learn more about **[using Claude Code in Slack](using-claude-in-slack.md#h_adda66b697)**.
------------------------------------------------------------------------
## What is the Slack connector?
The Slack connector is available for all paid plans (Pro, Max, Team, and Enterprise).
Enabling the Slack connector allows Claude to search within your Slack workspace’s channels, direct messages, and shared files to pull relevant context into your conversations. Note that members of Team and Enterprise plan organizations will not see the option to enable the Slack connector individually until it’s enabled by an Owner.
**Important:** You must install Claude in Slack before enabling and using the Slack connector.
## Enabling the Slack connector
### Team and Enterprise owners
1. Log in to your Owner or Primary Owner account and click your initials in the lower left corner.
2. Navigate to **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
3. Under “Connectors,” click the "Enable" button next to the Slack connector.
4. Users can then authenticate in their individual connector settings to begin using Slack in Claude.
### Individual Pro, Max, Team, and Enterprise users
1. Log in to your Claude account and click your initials in the lower left corner.
2. Navigate to **[Settings \> Connectors](http://claude.ai/settings/connectors)**.
3. Find the Slack connector and click “Connect.”
4. Click "Connect" to authenticate with the connector and start using Slack in Claude.
------------------------------------------------------------------------
## Managing your Claude in Slack connections
### Viewing Claude app connection status
1. Click on the Claude app in your Slack sidebar.
2. Go to the "Home" tab.
3. You'll see your connection status, including your connected account email and organization name.
### Disconnecting the Claude app
To disconnect your Claude account from Slack:
1. Go to the Claude Home tab in Slack.
2. Under **Disconnect Claude Account**, click the red "Disconnect" button.
3. Confirm the disconnection.
Disconnecting will:
- Remove the connection between your Claude account and Slack workspace.
- Delete all past Claude conversations in Slack from Claude (within 30 days).
- Preserve conversations in Slack, but Claude won't have awareness of them if you reconnect
### Disconnecting the Slack connector
You can also disconnect the Slack connector from your Claude settings (or you can enable/disable the connector for an individual chat):
1. Go to [](https://claude.ai/settings/integrations) claude.ai/settings/connectors
2. Find **Slack** in your list of Connectors.
3. Click the menu (...) and select "Disconnect."
------------------------------------------------------------------------
## Privacy and data
### Data storage
Your Slack conversations with Claude remain separate from your Claude history, keeping work organized across platforms.
### Data visibility
- Conversations initiated in Slack are not visible in [your Claude chat history](http://claude.ai/recents).
- Conversations initiated in the Claude web app are not accessible in Slack.
- Each platform maintains separate conversation histories.
### Data deletion
- Conversations are automatically deleted from Claude within 30 days if you disconnect the integration or uninstall the app.
- Your conversations in Slack follow your organization's Slack retention policies.
------------------------------------------------------------------------
## Frequently asked questions
### I’m trying to add Claude in Slack but it’s not working – help!
If you are using a company Slack instance and are not assigned to an Admin role, a Slack Admin must approve the Claude app on behalf of your organization before you’re able to download it. If you try to skip this step and install Claude in Slack, you’ll see a **Request to install** prompt where you can send a message to your Slack Admin. Work with them to approve the app and make it available for your team.
---
## getting-started-with-custom-connectors-using-remote-mcp.md
# Get started with custom connectors using remote MCP
Custom connectors using remote MCP are available on Claude and Claude Desktop for users on free, Pro, Max, Team, and Enterprise plans. Free users are limited to one custom connector. This feature is currently in beta.
## What are custom connectors?
Custom connectors let you connect Claude directly to the tools and data sources that matter most to your workflows. This enables Claude to operate within your favorite software and draw insights from the complete context of your external tools.
You can:
- Connect Claude to existing remote MCP servers.
- Build your own remote MCP servers to connect with any tool.
**⚠️ Security and Privacy with Custom Connectors (beta)**
Be aware that custom connectors allow you to connect Claude to services that have not been verified by Anthropic, and allow Claude to access and take action in these services. For more guidance, review the **[Security and privacy considerations](#h_9088ccdf4d)** section below.
## What are remote MCP servers?
The Model Context Protocol (MCP) is an open standard, created by Anthropic, for AI applications to connect to tools and data.
Previously, **[MCP servers only ran locally](https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop)** (i.e. on a user's laptop). Now, developers can build and host remote MCP servers that communicate with AI apps over the internet.
Remote MCP servers give models access to internet-hosted tools and data, transforming Claude into an informed teammate that can independently handle complex, multi-step projects tailored to your needs.
## Add a custom connector
**Note:** While anyone can build and host connectors using remote MCP, only Owners can add them to Team and Enterprise plans. Once a connector has been added to a Team or Enterprise organization, users individually connect to and enable that connector. This ensures that Claude can only access tools and data that the individual user has access to.
### For Team and Enterprise plans
**Preliminary steps for owners:**
Before members of Team and Enterprise plans can configure custom connectors, an Owner or Primary Owner needs to follow these initial steps to add a custom connector to your organization:
1. Navigate to **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
2. Click "Add custom connector" at the bottom of the section.
3. Add your connector's remote MCP server URL.
4. Optionally, click “Advanced settings” to specify an OAuth Client ID and OAuth Client Secret for your server.
5. Finish configuring your connector by clicking "Add."
**Steps for members after connector is configured:**
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Locate the "Connectors" section.
3. Find the custom connector your Owner added in the list (it will have a "Custom" label).
4. Click "Connect" to authenticate and start using the connector with Claude.
### For Pro and Max plans
If you are using an individual Pro or Max plan, follow these steps to add a custom connector:
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Locate the "Connectors" section.
3. Click "Add custom connector" at the bottom of the section.
4. Add your connector's remote MCP server URL.
5. Optionally, click “Advanced settings” to specify an OAuth Client ID and OAuth Client Secret for your server.
6. Finish configuring your connector by clicking "Add."
### Enabling connectors after configuration
You can enable connectors for individual conversations via the “+” button on the lower left of your chat interface, then "Connectors." You'll see your configured connectors with toggles allowing you to enable/disable them per conversation.
## How to remove connectors
You can remove a custom connector by following these steps:
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**
1. Team and Enterprise Owners can do this on their organization's behalf in **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**
2. Locate the "Connectors" section.
3. Click "Remove" or select the three dots next to the connector you'd like to remove.
4. Follow the prompts to remove.
If you're hoping to edit a custom connector, you'll need to remove it first, then re-add it using the updated details.
## How to build custom connectors
To learn about building connectors to use with Claude, see Building custom connectors via remote MCP servers.
## Security and privacy considerations
Custom connectors allow you to connect Claude to arbitrary services that have not been verified by Anthropic. When you connect Claude to external services, you're granting it the ability to access and potentially modify data within those services based on your permissions. It’s important to make sure you’re only connecting to remote MCP servers that you trust and that you’re aware of Claude’s interactions with web connectors.
### Security and permissions
When you add a custom connector to Claude, you'll typically go through an OAuth authentication process to securely sign in to the application and grant specific permissions. This allows Claude to interact with the application on your behalf, without Claude ever seeing your actual password. You can revoke these permissions at any time by disconnecting the connector in Claude's settings or the third-party service's security settings.
Remote MCP servers act as intermediaries between Claude and external applications. You should:
- **Only connect to trusted servers:** Only connect Claude to servers built and hosted by organizations and applications you trust.
- **Review requested permissions carefully:** During auth, review what permissions the MCP server is requesting to the application. Limit these scopes when possible and deny access if requested permissions seem unnecessary.
- **Be aware of prompt injections:** Malicious MCP servers may include hidden instructions that try to make Claude perform unintended actions. Claude has built-in protections that attempt to block these attacks, but it's important to pay attention to tool inputs & outputs and connect only to trusted servers.
- **Monitor changes in tool behavior:** Server developers may update tool behavior unexpectedly, leading to unintended or malicious behavior.
### Reporting malicious MCP servers
If you become aware of a malicious MCP server, please report it to our **[vulnerability disclosure program](https://hackerone.com/anthropic-vdp/)**, and choose [`https://github.com/modelcontextprotocol`](https://github.com/modelcontextprotocol) as the Asset.
### Taking actions with tools
Remote MCP servers give Claude tools it can invoke during your conversation. The developer of an MCP server can define what these tools do, including:
- Reading data from connected applications.
- Creating, modifying, or deleting data in connected applications.
- Taking actions on behalf of the user.
Claude can only access resources that you've given the server permission to access, but you should:
- Be aware of any actions Claude is taking and that they have no destructive or unintended effects.
- Review Claude's tool approval requests carefully and only click "Allow always" when using a server and tool that you trust to run unsupervised.
- Using the "Search and tools" menu, disable any tools that aren't relevant to the current conversation or that you don't want Claude to be able to invoke.
### Interactive connectors
Some connectors can display interactive interfaces directly within your Claude conversations. Instead of only returning text-based responses, these connectors can open live, interactive apps — like dashboards, task boards, or design tools — right in the chat.
Interactive connectors appear in two ways:
- **Inline cards:** Compact components embedded in the conversation, showing summaries, confirmations, or quick actions.
- **Fullscreen view:** Immersive interfaces for complex interactions like data visualizations or document editing. The conversation composer remains available so you can continue chatting with Claude.
You can interact with these connectors directly — filtering data, checking off tasks, adjusting settings — without leaving the conversation. Any actions you take within the interface use the same permissions you granted when connecting the tool.
**Admin controls:** Team and Enterprise plan owners can disable specific tool calls that render interactive connectors within **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
### Using Claude with Research
**Note:** **[Advanced Research](https://claude.com/blog/integrations)** is not currently able to invoke tools from local MCP servers.
Research allows Claude to deeply investigate queries by searching through hundreds of internal and external sources. During the research process, Claude can invoke tools from your connectors automatically without further approval.
When using Research with custom connectors:
- Disable any tools that can take write actions in external applications.
- Review Claude’s approval request carefully and be aware of which tools you’re granting Claude permission to invoke.
- Be mindful of the impact of Claude sending a large number of requests to your connectors.
See **[Using Research on Claude](../15-Claude-AI-Features/using-research-on-claude.md)** for more information about this feature.
---
## getting-started-with-custom-integrations-using-remote-mcp.md
# Get started with custom connectors using remote MCP
Custom connectors using remote MCP are available on Claude, Cowork, and Claude Desktop for users on free, Pro, Max, Team, and Enterprise plans. Free users are limited to one custom connector. This feature is currently in beta.
## What are custom connectors?
Custom connectors let you connect Claude directly to the tools and data sources that matter most to your workflows. This enables Claude to operate within your favorite software and draw insights from the complete context of your external tools.
You can:
- Connect Claude to existing remote MCP servers.
- Build your own remote MCP servers to connect with any tool.
**⚠️ Security and Privacy with Custom Connectors (beta)**
Be aware that custom connectors allow you to connect Claude to services that have not been verified by Anthropic, and allow Claude to access and take action in these services. For more guidance, review the **[Security and privacy considerations](#h_9088ccdf4d)** section below.
## What are remote MCP servers?
The Model Context Protocol (MCP) is an open standard, created by Anthropic, for AI applications to connect to tools and data.
Previously, **[MCP servers only ran locally](https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop)** (i.e. on a user's laptop). Now, developers can build and host remote MCP servers that communicate with AI apps over the internet.
Remote MCP servers give models access to internet-hosted tools and data, transforming Claude into an informed teammate that can independently handle complex, multi-step projects tailored to your needs.
## Add a custom connector
**Note:** While anyone can build and host connectors using remote MCP, only Owners can add them to Team and Enterprise plans. Once a connector has been added to a Team or Enterprise organization, users individually connect to and enable that connector. This ensures that Claude can only access tools and data that the individual user has access to.
### For Team and Enterprise plans
**Preliminary steps for owners:**
Before members of Team and Enterprise plans can configure custom connectors, an Owner or Primary Owner needs to follow these initial steps to add a custom connector to your organization:
1. Navigate to **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
2. Click "Add custom connector" at the bottom of the section.
3. Add your connector's remote MCP server URL.
4. Optionally, click “Advanced settings” to specify an OAuth Client ID and OAuth Client Secret for your server.
5. Finish configuring your connector by clicking "Add."
**Steps for members after connector is configured:**
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Locate the "Connectors" section.
3. Find the custom connector your Owner added in the list (it will have a "Custom" label).
4. Click "Connect" to authenticate and start using the connector with Claude.
### For Pro and Max plans
If you are using an individual Pro or Max plan, follow these steps to add a custom connector:
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
2. Locate the "Connectors" section.
3. Click "Add custom connector" at the bottom of the section.
4. Add your connector's remote MCP server URL.
5. Optionally, click “Advanced settings” to specify an OAuth Client ID and OAuth Client Secret for your server.
6. Finish configuring your connector by clicking "Add."
### Enabling connectors after configuration
You can enable connectors for individual conversations via the “+” button on the lower left of your chat interface, then "Connectors." You'll see your configured connectors with toggles allowing you to enable/disable them per conversation.
## How to remove connectors
You can remove a custom connector by following these steps:
1. Navigate to **[Settings \> Connectors](https://claude.ai/settings/connectors)**
1. Team and Enterprise Owners can do this on their organization's behalf in **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**
2. Locate the "Connectors" section.
3. Click "Remove" or select the three dots next to the connector you'd like to remove.
4. Follow the prompts to remove.
If you're hoping to edit a custom connector, you'll need to remove it first, then re-add it using the updated details.
## How to build custom connectors
To learn about building connectors to use with Claude, see Building custom connectors via remote MCP servers.
## Security and privacy considerations
Custom connectors allow you to connect Claude to arbitrary services that have not been verified by Anthropic. When you connect Claude to external services, you're granting it the ability to access and potentially modify data within those services based on your permissions. It’s important to make sure you’re only connecting to remote MCP servers that you trust and that you’re aware of Claude’s interactions with web connectors.
### Security and permissions
When you add a custom connector to Claude, you'll typically go through an OAuth authentication process to securely sign in to the application and grant specific permissions. This allows Claude to interact with the application on your behalf, without Claude ever seeing your actual password. You can revoke these permissions at any time by disconnecting the connector in Claude's settings or the third-party service's security settings.
Remote MCP servers act as intermediaries between Claude and external applications. You should:
- **Only connect to trusted servers:** Only connect Claude to servers built and hosted by organizations and applications you trust.
- **Review requested permissions carefully:** During auth, review what permissions the MCP server is requesting to the application. Limit these scopes when possible and deny access if requested permissions seem unnecessary.
- **Be aware of prompt injections:** Malicious MCP servers may include hidden instructions that try to make Claude perform unintended actions. Claude has built-in protections that attempt to block these attacks, but it's important to pay attention to tool inputs & outputs and connect only to trusted servers.
- **Monitor changes in tool behavior:** Server developers may update tool behavior unexpectedly, leading to unintended or malicious behavior.
### Reporting malicious MCP servers
If you become aware of a malicious MCP server, please report it to our **[vulnerability disclosure program](https://hackerone.com/anthropic-vdp/)**, and choose [`https://github.com/modelcontextprotocol`](https://github.com/modelcontextprotocol) as the Asset.
### Taking actions with tools
Remote MCP servers give Claude tools it can invoke during your conversation. The developer of an MCP server can define what these tools do, including:
- Reading data from connected applications.
- Creating, modifying, or deleting data in connected applications.
- Taking actions on behalf of the user.
Claude can only access resources that you've given the server permission to access, but you should:
- Be aware of any actions Claude is taking and that they have no destructive or unintended effects.
- Review Claude's tool approval requests carefully and only click "Allow always" when using a server and tool that you trust to run unsupervised.
- Using the "Search and tools" menu, disable any tools that aren't relevant to the current conversation or that you don't want Claude to be able to invoke.
### Interactive connectors
Some connectors can display interactive interfaces directly within your Claude conversations. Instead of only returning text-based responses, these connectors can open live, interactive apps — like dashboards, task boards, or design tools — right in the chat.
Interactive connectors appear in two ways:
- **Inline cards:** Compact components embedded in the conversation, showing summaries, confirmations, or quick actions.
- **Fullscreen view:** Immersive interfaces for complex interactions like data visualizations or document editing. The conversation composer remains available so you can continue chatting with Claude.
You can interact with these connectors directly — filtering data, checking off tasks, adjusting settings — without leaving the conversation. Any actions you take within the interface use the same permissions you granted when connecting the tool.
**Admin controls:** Team and Enterprise plan owners can disable specific tool calls that render interactive connectors within **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
### Using Claude with Research
**Note:** **[Advanced Research](https://claude.com/blog/integrations)** is not currently able to invoke tools from local MCP servers.
Research allows Claude to deeply investigate queries by searching through hundreds of internal and external sources. During the research process, Claude can invoke tools from your connectors automatically without further approval.
When using Research with custom connectors:
- Disable any tools that can take write actions in external applications.
- Review Claude’s approval request carefully and be aware of which tools you’re granting Claude permission to invoke.
- Be mindful of the impact of Claude sending a large number of requests to your connectors.
See **[Using Research on Claude](../15-Claude-AI-Features/using-research-on-claude.md)** for more information about this feature.
---
## google-sheets-add-on.md
# Google Sheets add-on
The [Claude for Sheets extension](https://workspace.google.com/marketplace/app/claude%5Ffor%5Fsheets/909417792257) integrates Claude into Google Sheets, allowing you to execute interactions with Claude directly in cells.
## Why use Claude for Sheets?
Claude for Sheets enables prompt engineering at scale by enabling you to test prompts across evaluation suites in parallel. Additionally, it excels at office tasks like survey analysis and online data processing.
Visit our [prompt engineering example sheet](https://docs.google.com/spreadsheets/d/1sUrBWO0u1-ZuQ8m5gt3-1N5PLR6r__UsRsB7WeySDQA/copy) to see this in action.
## Get started with Claude for Sheets
### Install Claude for Sheets
Easily enable Claude for Sheets using the following steps:
1. **Get your Claude API key:** If you don't yet have an API key, you can make API keys in the Claude Console.
2. **Install the Claude for Sheets extension:** Find the [Claude for Sheets extension](https://workspace.google.com/marketplace/app/claude%5Ffor%5Fsheets/909417792257) in the add-on marketplace, then click the blue \`Install\` button and accept the permissions.
1. Permissions: The Claude for Sheets extension will ask for a variety of permissions needed to function properly. Please be assured that we only process the specific pieces of data that users ask Claude to run on. This data is never used to train our generative models.
2. Extension permissions include:
1. **View and manage spreadsheets that this application has been installed in:** Needed to run prompts and return results.
2. **Connect to an external service:** Needed in order to make calls to Claude API endpoints.
3. **Allow this application to run when you are not present:** Needed to run cell recalculations without user intervention.
4. **Display and run third-party web content in prompts and sidebars inside Google applications:** Needed to display the sidebar and post-install prompt.
3. **Connect your API key:** Enter your API key at `Extensions` \> `Claude for Sheets™` \> `Open sidebar` \> `☰` \> `Settings` \> `API provider`. You may need to wait or refresh for the Claude for Sheets menu to appear.
**Important:** You will have to re-enter your API key every time you make a new Google Sheet.
### Enter your first prompt
There are two main functions you can use to call Claude using Claude for Sheets. For now, let's use `CLAUDE()`.
**Simple prompt**
In any cell, type `=CLAUDE("Claude, in one sentence, what's good about the color blue?")`.
Claude should respond with an answer. You will know the prompt is processing because the cell will say `Loading...`.
**Adding parameters**
Parameter arguments come after the initial prompt, like `=CLAUDE(prompt, model, params...)`.
**Note:** `model` is always second in the list.
Now type in any cell `=CLAUDE("Hi, Claude!", "claude-haiku-4-5-20251001", "max_tokens", 3)`.
Any API parameter can be set this way. You can even pass in an API key to be used just for this specific cell, like this: `"api_key", "sk-ant-api03-j1W..."`.
## Advanced use
`CLAUDEMESSAGES` is a function that allows you to specifically use the [Messages API](../04-API-Reference/Other/api-messages-2dd213ca95.md). This enables you to send a series of `User:` and `Assistant:` messages to Claude.
This is particularly useful if you want to simulate a conversation or [prefill Claude's response](../10-Prompting-Guides/build-with-claude-prompt-engineering-prefill-claudes-response.md).
Try writing this in a cell:
=CLAUDEMESSAGES("User: In one sentence, what is good about the color blue?
Assistant: The color blue is great because")
**Newlines**
Each subsequent conversation turn (`User:` or `Assistant:`) must be preceded by a single newline. To enter newlines in a cell, use the following key combinations:
- **Mac:** Cmd + Enter
- **Windows:** Alt + Enter
**Example multiturn CLAUDEMESSAGES() call with system prompt**
To use a system prompt, set it as you'd set other optional function parameters. (You must first set a model name.)
=CLAUDEMESSAGES("User: What's your favorite flower? Answer in <answer> tags.
Assistant: <answer>", "claude-haiku-4-5-20251001", "system", "You are a cow who loves to moo in response to any and all user queries.")
## Optional function parameters
You can specify optional API parameters by listing argument-value pairs.
You can set multiple parameters. Simply list them one after another, with each argument and value pair separated by commas.
**Note:** The first two parameters must always be the prompt and the model. You cannot set an optional parameter without also setting the model.
The argument-value parameters you might care about most are:
[TABLE]
### Example: Setting parameters
Ex. Set `system` prompt, `max_tokens`, and `temperature`:
=CLAUDE("Hi, Claude!", "claude-haiku-4-5-20251001", "system", "Repeat exactly what the user says.", "max_tokens", 100, "temperature", 0.1)
Ex. Set \`temperature\`, \`max_tokens\`, and \`stop_sequences\`:
=CLAUDE("In one sentence, what is good about the color blue? Output your answer in <answer> tags.","claude-opus-4-5-20251101","temperature", 0.2,"max_tokens", 50,"stop_sequences", "\[""</answer>""\]")
Ex. Set `api_key`:
=CLAUDE("Hi, Claude!", "claude-haiku-4-5-20251001","api_key", "sk-ant-api03-j1W...")
## Claude for Sheets usage examples
### Prompt engineering interactive tutorial
Our in-depth [prompt engineering interactive tutorial](https://docs.google.com/spreadsheets/d/19jzLgRruG9kjUQNKtCg1ZjdD6l6weA6qRXG5zLIAhC8/edit?usp=sharing) utilizes Claude for Sheets.
Check it out to learn or brush up on prompt engineering techniques.
**Note:** Just as with any instance of Claude for Sheets, you will need an API key to interact with the tutorial.
### Prompt engineering workflow
Our [Claude for Sheets prompting examples workbench](https://docs.google.com/spreadsheets/d/1sUrBWO0u1-ZuQ8m5gt3-1N5PLR6r%5F%5FUsRsB7WeySDQA/copy) is a Claude-powered spreadsheet that houses example prompts and prompt engineering structures.
### Claude for Sheets workbook template
Make a copy of our [Claude for Sheets workbook template](https://docs.google.com/spreadsheets/d/1UwFS-ZQWvRqa6GkbL4sy0ITHK2AhXKe-jpMLzS0kTgk/copy) to get started with your own Claude for Sheets work!
## Troubleshooting
### NAME? Error: Unknown function: 'claude'
1. Ensure that you have enabled the extension for use in the current sheet
1. Go to *Extensions \> Add-ons \> Manage add-ons*
2. Click on the triple dot menu at the top right corner of the Claude for Sheets extension and make sure "Use in this document" is checked
2. Refresh the page
### \#ERROR!, ⚠ DEFERRED ⚠ or ⚠ THROTTLED ⚠
You can manually recalculate `#ERROR!`, `⚠ DEFERRED ⚠`, or `⚠ THROTTLED ⚠` cells by selecting from the recalculate options within the Claude for Sheets extension menu.
### Can't enter API key
1. Wait 20 seconds, then check again
2. Refresh the page and wait 20 seconds again
3. Uninstall and reinstall the extension
## Further information
For more information regarding this extension, see the [Claude for Sheets Google Workspace Marketplace](https://workspace.google.com/marketplace/app/claude%5Ffor%5Fsheets/909417792257) overview page.
---
## intro-to-connectors.md
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
[](#)
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
- Meet Claude
Products
- [](/product/overview)
Claude
- [](/product/claude-code)
Claude Code
- [](/product/cowork)
Claude Cowork
Features
- [](/claude-for-chrome)
Claude for Chrome
- [](/claude-for-slack)
Claude for Slack
- [](/claude-for-excel)
Claude for Excel
- [](/claude-for-powerpoint)
Claude for PowerPoint
- [](/skills)
Skills
Models
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
1. Tutorials
[](/resources/tutorials)
Tutorials
/
2.
Getting started with connectors
Explore here
- [](#)
Ask questions about this page
- [](#)
Copy as markdown
# Getting started with connectors
Learn how to supercharge Claude by connecting the tools you already use. This tutorial shows you how to set up connectors that give Claude access to your files, apps, and workflows.
-
Category
Professional
-
Product
Claude.ai
-
Reading time
Watch time
5
min
4
min
-
Share
[Copy link](#)
https://claude.com/resources/tutorials/getting-started-with-connectors
## Related tutorials
[Choosing the right Claude model: Haiku, Sonnet, and Opus](/resources/tutorials/choosing-the-right-claude-model)
Choosing the right Claude model: Haiku, Sonnet, and Opus
Choosing the right Claude model: Haiku, Sonnet, and Opus
Tutorial
[Tutorial](/resources/tutorials/choosing-the-right-claude-model)
Tutorial
[Claude Enterprise Administrator Guide](/resources/tutorials/claude-enterprise-administrator-guide)
Claude Enterprise Administrator Guide
Claude Enterprise Administrator Guide
Tutorial
[Tutorial](/resources/tutorials/claude-enterprise-administrator-guide)
Tutorial
[How to customize plugins in Cowork](/resources/tutorials/how-to-customize-plugins-in-cowork)
How to customize plugins in Cowork
How to customize plugins in Cowork
Tutorial
[Tutorial](/resources/tutorials/how-to-customize-plugins-in-cowork)
Tutorial
[How to build a plugin from scratch in Cowork](/resources/tutorials/how-to-build-a-plugin-from-scratch-in-cowork)
How to build a plugin from scratch in Cowork
How to build a plugin from scratch in Cowork
Tutorial
[Tutorial](/resources/tutorials/how-to-build-a-plugin-from-scratch-in-cowork)
Tutorial
[Homepage](https://claude.com)
Homepage
[Next](#)
Next
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Write
[Button Text](#)
Button Text
Learn
[Button Text](#)
Button Text
Code
[Button Text](#)
Button Text
Write
- Help me develop a unique voice for an audience
[](#)
Hi Claude! Could you help me develop a unique voice for an audience? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Improve my writing style
[](#)
Hi Claude! Could you improve my writing style? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Brainstorm creative ideas
[](#)
Hi Claude! Could you brainstorm creative ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Learn
- Explain a complex topic simply
[](#)
Hi Claude! Could you explain a complex topic simply? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Help me make sense of these ideas
[](#)
Hi Claude! Could you help me make sense of these ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Prepare for an exam or interview
[](#)
Hi Claude! Could you prepare for an exam or interview? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Code
- Explain a programming concept
[](#)
Hi Claude! Could you explain a programming concept? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Look over my code and give me tips
[](#)
Hi Claude! Could you look over my code and give me tips? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Vibe code with me
[](#)
Hi Claude! Could you vibe code with me? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
More
- Write case studies
[](#)
This is another test
- Write grant proposals
[](#)
Hi Claude! Could you write grant proposals? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to — like Google Drive, web search, etc. — if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can - an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Write video scripts
[](#)
this is a test
[Anthropic](https://www.anthropic.com/)
Anthropic
© \[year\] Anthropic PBC
Products
- Claude
[Claude](/product/overview)
Claude
- Claude Code
[Claude Code](/product/claude-code)
Claude Code
- Claude Code for Enterprise
[Claude Code for Enterprise](/product/claude-code/enterprise)
Claude Code for Enterprise
- Claude Cowork
[Claude Cowork](/product/cowork)
Claude Cowork
- Max plan
[Max plan](/pricing/max)
Max plan
- Team plan
[Team plan](/pricing/team)
Team plan
- Enterprise plan
[Enterprise plan](/pricing/enterprise)
Enterprise plan
- Download app
[Download app](/download)
Download app
- Pricing
[Pricing](/pricing)
Pricing
- Log in
[Log in](https://claude.ai/login)
Log in
Features
- Claude for Chrome
[Claude for Chrome](/claude-for-chrome)
Claude for Chrome
- Claude for Slack
[Claude for Slack](/claude-for-slack)
Claude for Slack
- Claude for Excel
[Claude for Excel](/claude-for-excel)
Claude for Excel
- Claude for PowerPoint
[Claude for PowerPoint](/claude-for-powerpoint)
Claude for PowerPoint
- Skills
[Skills](/skills)
Skills
Models
- Opus
[Opus](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- Sonnet
[Sonnet](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- Haiku
[Haiku](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
Solutions
- AI agents
[AI agents](/solutions/agents)
AI agents
- Claude Code Security
[Claude Code Security](/solutions/claude-code-security)
Claude Code Security
- Code modernization
[Code modernization](/solutions/code-modernization)
Code modernization
- Coding
[Coding](/solutions/coding)
Coding
- Customer support
[Customer support](/solutions/customer-support)
Customer support
- Education
[Education](/solutions/education)
Education
- Financial services
[Financial services](/solutions/financial-services)
Financial services
- Government
[Government](/solutions/government)
Government
- Healthcare
[Healthcare](/solutions/healthcare)
Healthcare
- Life sciences
[Life sciences](/solutions/life-sciences)
Life sciences
- Nonprofits
[Nonprofits](/solutions/nonprofits)
Nonprofits
Claude Platform
- Overview
[Overview](/platform/api)
Overview
- Developer docs
[Developer docs](https://platform.claude.com/docs)
Developer docs
- Pricing
[Pricing](https://claude.com/pricing#api)
Pricing
- Marketplace
[Marketplace](/platform/marketplace)
Marketplace
- Amazon Bedrock
[Amazon Bedrock](/partners/amazon-bedrock)
Amazon Bedrock
- Google Cloud’s Vertex AI
[Google Cloud’s Vertex AI](/partners/google-cloud-vertex-ai)
Google Cloud’s Vertex AI
- Microsoft Foundry
[Microsoft Foundry](/partners/microsoft-foundry)
Microsoft Foundry
- Regional compliance
[Regional compliance](/regional-compliance)
Regional compliance
- Console login
[Console login](../04-API-Reference/Other/platform-claude-com.md)
Console login
Resources
- Blog
[Blog](/blog)
Blog
- Claude partner network
[Claude partner network](/partners)
Claude partner network
- Community
[Community](/community)
Community
- Connectors
[Connectors](/connectors)
Connectors
- Courses
[Courses](https://www.anthropic.com/learn)
Courses
- Customer stories
[Customer stories](/customers)
Customer stories
- Engineering at Anthropic
[Engineering at Anthropic](https://www.anthropic.com/engineering)
Engineering at Anthropic
- Events
[Events](https://www.anthropic.com/events)
Events
- Plugins
[Plugins](/plugins)
Plugins
- Powered by Claude
[Powered by Claude](/partners/powered-by-claude)
Powered by Claude
- Service partners
[Service partners](/partners/services)
Service partners
- Startups program
[Startups program](/programs/startups)
Startups program
- Tutorials
[Tutorials](/resources/tutorials)
Tutorials
- Use cases
[Use cases](/resources/use-cases)
Use cases
Company
- Anthropic
[Anthropic](https://www.anthropic.com/)
Anthropic
- Careers
[Careers](https://www.anthropic.com/careers)
Careers
- Economic Futures
[Economic Futures](https://www.anthropic.com/economic-futures)
Economic Futures
- Research
[Research](https://www.anthropic.com/research)
Research
- News
[News](https://www.anthropic.com/news)
News
- Responsible Scaling Policy
[Responsible Scaling Policy](../19-Reference/announcing-our-updated-responsible-scaling-policy-anthropic.md)
Responsible Scaling Policy
- Security and compliance
[Security and compliance](https://trust.anthropic.com/)
Security and compliance
- Transparency
[Transparency](https://anthropic.com/transparency)
Transparency
Help and security
- Availability
[Availability](https://www.anthropic.com/supported-countries)
Availability
- Status
[Status](https://status.anthropic.com/)
Status
- Support center
[Support center](https://support.claude.com/en/)
Support center
Terms and policies
Privacy choices
### Cookie settings
We use cookies to deliver and improve our services, analyze site usage, and if you agree, to customize or personalize your experience and market our services to you. You can read our Cookie Policy [here](https://www.anthropic.com/legal/cookies).
Customize cookie settings
Reject all cookies
Accept all cookies
###### Necessary
Enables security and basic functionality.
Required
###### Analytics
Enables tracking of site performance.
Off
###### Marketing
Enables ads personalization and tracking.
Off
Save preferences
Privacy policy
[Privacy policy](https://www.anthropic.com/legal/privacy)
Privacy policy
Responsible disclosure policy
[Responsible disclosure policy](https://www.anthropic.com/responsible-disclosure-policy)
Responsible disclosure policy
Terms of service: Commercial
[Terms of service: Commercial](https://www.anthropic.com/legal/commercial-terms)
Terms of service: Commercial
Terms of service: Consumer
[Terms of service: Consumer](https://www.anthropic.com/legal/consumer-terms)
Terms of service: Consumer
Usage policy
[Usage policy](https://www.anthropic.com/legal/aup)
Usage policy
[x.com](https://x.com/claudeai)
x.com
[LinkedIn](https://www.linkedin.com/showcase/claude/)
LinkedIn
[YouTube](https://www.youtube.com/@anthropic-ai)
YouTube
[Instagram](https://www.instagram.com/claudeai)
Instagram
English (US)
[English (US)](/)
[日本語 (Japan)](/ja-jp)
[Deutsch (Germany)](/de-de)
[Français (France)](/fr-fr)
[한국어 (South Korea)](/ko-kr)
---
## microsoft-365-connector-security-guide.md
4. Microsoft 365 Connector: Security Guide
# Microsoft 365 Connector: Security Guide
## What it is
The Microsoft 365 Connector is an **Anthropic-hosted integration** that enables Claude to securely access Microsoft 365 services (Outlook, SharePoint, OneDrive, Teams) through user-delegated permissions. Anthropic has completed Microsoft's publisher verification process, associating our verified Microsoft Partner Network account with this application to confirm our organizational identity.
The connector operates as a **secure proxy**, and your Microsoft 365 documents, emails, and files remain in your tenant. The connector only retrieves data on-demand during active queries and does not cache file content. Credentials are encrypted and managed by Anthropic's backend infrastructure. The MCP server itself does not store or manage these credentials. Microsoft's Azure SDK handles the On-Behalf-Of token exchange and caching on a per-user basis for accessing the Graph API.
## Access restriction
### Access can be fully restricted
The connector provides **multiple layers of access control** to address your security requirements. For detailed information on administration of the Microsoft 365 Connector see **[Enabling and using the Microsoft 365 connector](enabling-and-using-the-microsoft-365-connector.md)**.
**1. Organization-level gating**
Access to the connector for Team and Enterprise plan users requires a two-step approval process. First, owners must explicitly enable the Microsoft 365 connector in Claude organization settings by navigating to Organization settings → Connectors → Browse connectors → Add "Microsoft 365". Until this approval is granted, users have no access.
Second, after the Owner enables the connector, a Microsoft Entra Global Administrator must complete individual authentication and grant consent on behalf of the whole organization before any team members can connect.
**2. Microsoft Entra Admin pre-consent requirement**
Before users can access the connector, a Microsoft Entra Admin must complete a one-time setup, which will:
- Add two service principals and Enterprise apps in Microsoft Entra ID (M365 MCP Client and M365 MCP Server). This establishes a service-level identity for the Microsoft 365 Connector apps in your tenant.
- Grant admin pre-consent for your Microsoft 365 tenant.
- Optionally restrict which Microsoft Entra ID users and groups are allowed to use the connector.
- Optionally restrict permissions the connector is allowed to use to selectively control which Microsoft 365 services are accessible.
**3. Granular permission revocation**
You can selectively disable specific capabilities via Microsoft Entra Admin Center. For example:
[TABLE]
Changes take effect immediately for all users in your organization. Note that users can also choose to disable capabilities that they have permission to use during a chat or session by selectively toggling off the connector’s tools.
**4. Microsoft conditional access integration**
The connector fully supports your existing Entra (Azure AD) policies:
- **Multi-factor authentication (MFA)**: Enforce MFA for connector access
- **Device compliance**: Require managed/compliant devices
- **IP restrictions**: Limit Microsoft authentication to corporate network or VPN
- **Group-based access**: Restrict to specific security groups
**5. User-level permissions**
- The Microsoft 365 Connector uses **[delegated permissions](https://learn.microsoft.com/en-us/graph/permissions-overview?tabs=http#delegated-permissions)**.
- Users can only access Microsoft 365 data **they already have permission** for
- SharePoint search requires Sites.Read.All permission. Site-specific permissioning (using \*.Selected permissions) is not supported because the underlying search is tenant-wide.
- Users cannot bypass SharePoint sharing settings or folder permissions
- Users cannot access other users' private files or emails
- Delegated permissions inherently respect Microsoft 365 data loss prevention (DLP) policies
**6. Token management**
- Refresh tokens expire after 90 days of inactivity by default, requiring re-authentication. This can be customized in Microsoft Entra ID using a token lifetime policy.
- Access tokens typically expire within 60-90 minutes per Microsoft Entra ID defaults and are automatically refreshed
- Admins or users can revoke access anytime via Microsoft Entra ID
- The Microsoft 365 Connector never sees or stores passwords
## Security architecture summary
### Authentication flow
- **OAuth 2.0 On-Behalf-Of (OBO):** Industry-standard delegated authentication
- **PKCE protection**: Public client uses Proof Key for Code Exchange to prevent authorization code interception
- **Two-stage token exchange**: User authenticates to obtain access token for MCP server, then MCP server exchanges it for Graph API access using OBO flow with confidential client credentials. In this flow, not even the user or their Claude client has access to the OBO tokens. Only the MCP server can access and use tokens with access to the user’s data via the Microsoft Graph API.
- **No credential storage**: Users never share Microsoft passwords with Anthropic
- **Encrypted token storage**: Access and refresh tokens are encrypted while cached by the Claude backend
### Data flow
- Documents and other content are retrieved **only during active queries**
- **Tool call results** from the connector that are **part of stored chats are retained**
- **The user who requested the Claude chat** can see the tool call results and Claude’s response incorporating the data
- **Other users shared on the chat** can only see Claude’s response incorporating the result of the tool call
- Each request creates a fresh data flow which is cleaned up after the response is returned
### Multi-tenant isolation
- Microsoft Entra tenants are **cryptographically separated** from each other using a common-scoped multi-tenant configuration
- Multi-tenant isolation is cryptographically enforced through digitally signed access tokens that bind each user to their organization’s tenant
## Available capabilities
### Current features (read-only access)
The connector provides **read-only** access to:
[TABLE]
## Permissions list
**Basic permissions**
- [User.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#userread) - Sign in and read user profile (basic requirement)
**Mail permissions**
- [Mail.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#mailread) - Read user mail (required for email tools/resources)
- [Mail.ReadBasic](https://learn.microsoft.com/en-us/graph/permissions-reference#mailreadbasic) - Read user mail metadata (alternative for limited functionality)
- [Mail.Read.Shared](https://learn.microsoft.com/en-us/graph/permissions-reference#mailreadshared) - Read user and shared mail
- [MailboxFolder.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#mail-permissions) - Read a user's mailbox folders
- [MailboxItem.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#mail-permissions) - Read a user's mailbox items
**Calendar permissions**
- [Calendars.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#calendarsread) - Read user calendars and events
- [Calendars.Read.Shared](https://learn.microsoft.com/en-us/graph/permissions-reference#calendarsreadshared) - Read calendars user can access, including shared
**User directory**
- [User.ReadBasic.All](https://learn.microsoft.com/en-us/graph/permissions-reference#userreadbasicall) - Read basic profiles of all users (for meeting availability)
**Chat permissions**
- [Chat.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#chatread) - Read user chat messages
- [Chat.ReadBasic](https://learn.microsoft.com/en-us/graph/permissions-reference#chatreadbasic) - Read user chat metadata (alternative for limited functionality)
- [ChatMember.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#chatmemberread) - Read the members of chats
- [ChatMessage.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#chatmessageread) - Read user chat messages (more specific than Chat.Read)
**Channel permissions**
- [Channel.ReadBasic.All](https://learn.microsoft.com/en-us/graph/permissions-reference#channelreadbasicall) - Read the names and descriptions of channels
- [ChannelMessage.Read.All](https://learn.microsoft.com/en-us/graph/permissions-reference#channelmessagereadall) - Read channel messages
**Meeting permissions**
- [OnlineMeetings.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#onlinemeetingsread) - Read online meetings
- [OnlineMeetingTranscript.Read.All](https://learn.microsoft.com/en-us/graph/permissions-reference#onlinemeetingtranscriptreadall) - Read meeting transcripts
- [OnlineMeetingAiInsight.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#onlinemeetingaiinsightread) - Read all AI Insights for online meetings
- [OnlineMeetingArtifact.Read.All](https://learn.microsoft.com/en-us/graph/permissions-reference#onlinemeetingartifactreadall) - Read user's online meeting artifacts
- [OnlineMeetingRecording.Read.All](https://learn.microsoft.com/en-us/graph/permissions-reference#onlinemeetingrecordingreadall) - Read all recordings of online meetings
**Files permissions**
- [Files.Read](https://learn.microsoft.com/en-us/graph/permissions-reference#filesread) - Read user files
- [Files.Read.All](https://learn.microsoft.com/en-us/graph/permissions-reference#filesreadall) - Read all files user can access
**Sites permissions**
- [Sites.Read.All](https://learn.microsoft.com/en-us/graph/permissions-reference#sitesreadall) - Read items in all site collections
- [Sites.Selected](https://learn.microsoft.com/en-us/graph/permissions-reference#sitesselected) – Manages application access at the site collection level, providing access to a specific site collection
## Current limitations
- **No write capabilities**: Cannot send emails, schedule meetings, create/modify documents, or post Teams messages.
- **User-level access only**: Access with service principal authentication is not supported.
## Frequently asked questions
### Q: Can we test with a small pilot group before enterprise-wide rollout?
A: Yes. The recommended approach is to use app assignment to restrict who can use the connector:
- Owner enables connector in Claude organization settings
- Microsoft Entra Admin completes pre-consent setup
- Use Microsoft Entra Enterprise App assignment to restrict access to specific users or groups (e.g., assign only "IT Security Test Group" to the app).
- Expand groups progressively for gradual deployment
### Q: How do we ensure no data leakage occurs between our organization and others in the multi-tenant environment?
**A**: Multi-tenant isolation ensures complete separation:
- Server uses the common tenant configuration to accept tokens from any Microsoft Entra ID tenant
- Each user's token contains their organization's tenant ID (tid claim) which is validated
- Graph API tokens obtained through OBO are automatically scoped to the user and their tenant
- Cross-tenant token access is prevented cryptographically by the design of Microsoft Graph’s OAuth 2.0 implementation.
### Q: What happens if an employee tries to access company data from a personal Claude account?
**A**: The connector validates identity during authentication:
- User must have access to the Team/Enterprise organization where the connector is enabled
- Microsoft login validates user's Microsoft Entra ID credentials
- Token validation confirms user's tenant ID
- Graph API enforces tenant boundaries
- Personal Claude accounts cannot access enterprise Microsoft 365 data without organization membership
### Q: Do you have audit logging for compliance?
**A:** Yes, audit logging is available for your compliance needs. All Graph API calls made by the connector are logged in your organization's Microsoft 365 audit log, which you can access through the M365 Compliance Center. These logs show the timestamp, user, operation performed, and resource accessed, with retention periods matching your Microsoft 365 audit policy. Additionally, Anthropic logs authentication and tool execution events.
### Q: Can we revoke access if we discover unauthorized usage?
**A**: There are multiple revocation methods:
- **User-level**: Users disconnect via Claude Settings → Connectors
- **Admin-level**: Disable connector in Claude organization settings (all users affected)
- **Permission-level**: Revoke specific permissions in Microsoft Entra Admin Center
- **Tenant-level**: Revoke all permissions in Microsoft Entra Admin Center
### Q: What certifications does Anthropic have?
**A:** Anthropic has the following certifications:
- **SOC 2 Type II** (annual audit)
- **ISO 27001** certified
- **GDPR compliant** (DPA available)
- **Microsoft publisher-verified** application
## Additional resources
- Claude Help Center: **[Enabling and using the Microsoft 365 connector](enabling-and-using-the-microsoft-365-connector.md)**
- **[Overview of Microsoft Graph permissions: Delegated permissions](https://learn.microsoft.com/en-us/graph/permissions-overview?tabs=http#delegated-permissions)**
---
## resources-tutorials-how-to-use-claude-in-excel-for-accounting-revenue-model-vali.md
<!-- Source: https://claude.com/resources/tutorials/how-to-use-claude-in-excel-for-accounting-revenue-model-validation -->
:root {
--grid-breakout: [full-start] minmax(0, 1fr) [content-start] repeat(var(--_grid---column-count), minmax(0, var(--_grid---column-width))) [content-end] minmax(0, 1fr) [full-end];
--grid-breakout-single: [full-start] minmax(0, 1fr) [content-start] minmax(0, calc(100% - var(--site--margin) * 2)) [content-end] minmax(0, 1fr) [full-end];
}
::before, ::after {
box-sizing: border-box;
}
.w-embed:before, .w-embed:after,
.w-richtext:before, .w-richtext:after {
content: unset;
}
html {
background-color: var(--_theme---background);
}
button {
background-color: unset;
padding: unset;
text-align: inherit;
}
button:not(:disabled) {
cursor: pointer;
}
video {
width: 100%;
object-fit: cover;
}
/* remove padding of empty element */
.wf-empty {
padding: 0;
}
svg {
max-width: 100%;
}
@media (prefers-color-scheme: light) {
option { color: black; }
}
img::selection {
background: transparent;
}
/* Typography */
body {
text-transform: var(--_text-style---text-transform);
font-smoothing: antialiased;
-webkit-font-smoothing: antialiased;
}
/* Clear Defaults */
a:not ([class]) {
text-decoration: underline;}
[class~="u-rich-text"] a,
[class~="u-rich-text-cs"] a,
[class~="u-rich-text-blog"] a,
[class~="u-rich-text-tutorials"] a,
a.u-rich-text,
[class~="command_instruction"] a {
transition: color .15s ease-out, text-decoration-color .15s ease-out;
text-underline-offset: 3px;
text-decoration: underline;
color: currentcolor;
text-decoration-color: var(--_theme---border-primary);
}
[class~="u-rich-text"] a:hover,
[class~="u-rich-text-cs"] a:hover,
[class~="u-rich-text-blog"] a:hover,
[class~="u-rich-text-tutorials"] a:hover,
a.u-rich-text:hover,
[class~="command_instruction"] a:hover {
text-decoration-color: var(--_theme---foreground-primary);
color: var(--_theme---foreground-primary);
}
h1,h2,h3,h4,h5,h6,p,blockquote,label {
font-family: inherit;
font-size: inherit;
font-weight: inherit;
line-height: inherit;
letter-spacing: inherit;
text-transform: inherit;
text-wrap: inherit;
margin-top: 0;
margin-bottom: 0;
}
select:has(option[value=""]:checked) {
color: color-mix(in lab, currentcolor 60%, transparent)
}
/* Selection Color */
::selection {
background-color: var(--_theme---selection--background);
color: var(--_theme---selection--text);
}
/* Margin Trim */
:is(.u-margin-trim,.u-rich-text) > :not(:not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim) ~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim)),
:is(.u-margin-trim,.u-rich-text) > :not(:not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim) ~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim)).u-display-contents > :first-child {
margin-top: 0;
}
:is(.u-margin-trim,.u-rich-text) > :not(:has(~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim))),
:is(.u-margin-trim,.u-rich-text) > :not(:has(~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim))).u-display-contents > :last-child {
margin-bottom: 0;
}
/* Line Height Trim */
:is(h1,h2,h3,h4,h5,h6,p):not(.u-text-trim-off,:has([class*="u-text-style-"]))::before,
[class*="u-text-style-"]:not(.u-text-trim-off,:has(h1,h2,h3,h4,h5,h6,p))::before {
content: "";
display: table;
margin-bottom: calc(-0.5lh + var(--_text-style---trim-top));
}
:is(h1,h2,h3,h4,h5,h6,p):not(.u-text-trim-off,:has([class*="u-text-style-"]))::after,
[class*="u-text-style-"]:not(.u-text-trim-off,:has(h1,h2,h3,h4,h5,h6,p))::after {
content: "";
display: table;
margin-bottom: calc(-0.5lh + var(--_text-style---trim-bottom));
}
/* Rich Text Links */
.w-richtext a {
position: relative;
z-index: 4;
}
/* Line Clamp */
.u-line-clamp-1, .u-line-clamp-2, .u-line-clamp-3, .u-line-clamp-4 {
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.u-line-clamp-2 { -webkit-line-clamp: 2; }
.u-line-clamp-3 { -webkit-line-clamp: 3; }
.u-line-clamp-4 { -webkit-line-clamp: 4; }
/* Child Contain */
.u-child-contain > * {
width: 100%;
max-width: inherit !important;
margin-inline: 0 !important;
margin-top: 0 !important;
}
/* Hide */
.u-hide-if-empty:empty,
.u-hide-if-empty:not(:has(> :not(.w-condition-invisible))),
.u-hide-if-empty-cms:not(:has(.w-dyn-item)),
.u-embed-js,
.u-embed-css {
display: none !important;
}
/* Focus State */
a, button, :where([tabindex]), [data-outline] {
outline-offset: var(--focus--offset-outer);
}
a:focus-visible,
button:focus-visible,
[tabindex]:focus-visible,
label:has(input:focus-visible) [data-outline] {
outline-color: color-mix(in srgb, var(--_button-style---border) 50%, transparent);
outline-width: var(--focus--width);
outline-style: solid;
}
/* Global / Clickable Component */
.wf-design-mode .clickable_wrap {
z-index: 0;
}
.clickable_wrap a[href="#"] {
display: none;
}
.clickable_wrap a[href="#"] ~ button {
display: block;
}
/* Responsive Above */
@container threshold-large (width >= 62em) {
.u-order-unset-above { order: unset !important; }
.u-all-unset-above { all: unset !important; }
.u-grid-below { display: flex !important; }
.u-max-width-unset-above { max-width: unset !important; }
.u-width-unset-above { width: unset !important; }
.u-hide-above { display: none !important; }
}
@container threshold-medium (width >= 48em) {
.u-order-unset-above { order: unset !important; }
.u-all-unset-above { all: unset !important; }
.u-grid-below { display: flex !important; }
.u-max-width-unset-above { max-width: unset !important; }
.u-width-unset-above { width: unset !important; }
.u-hide-above { display: none !important; }
}
@container threshold-small (width >= 30em) {
.u-order-unset-above { order: unset !important; }
.u-all-unset-above { all: unset !important; }
.u-grid-below { display: flex !important; }
.u-max-width-unset-above { max-width: unset !important; }
.u-width-unset-above { width: unset !important; }
.u-hide-above { display: none !important; }
}
/* Responsive Below */
@container threshold-large (width < 62em) {
.u-order-unset-below { order: unset !important; }
.u-all-unset-below { all: unset !important; }
.u-grid-above { display: flex !important; }
.u-max-width-unset-below { max-width: unset !important; }
.u-width-unset-below { width: unset !important; }
.u-alignment-unset-below {
--_alignment---direction: start;
align-self: start;
}
.u-hide-below { display: none !important; }
}
@container threshold-medium (width < 48em) {
.u-order-unset-below { order: unset !important; }
.u-all-unset-below { all: unset !important; }
.u-grid-above { display: flex !important; }
.u-max-width-unset-below { max-width: unset !important; }
.u-width-unset-below { width: unset !important; }
.u-alignment-unset-below {
--_alignment---direction: start;
align-self: start;
}
.u-hide-below { display: none !important; }
}
@container threshold-small (width < 30em) {
.u-order-unset-below { order: unset !important; }
.u-all-unset-below { all: unset !important; }
.u-grid-above { display: flex !important; }
.u-max-width-unset-below { max-width: unset !important; }
.u-width-unset-below { width: unset !important; }
.u-alignment-unset-below {
--_alignment---direction: start;
align-self: start;
}
.u-hide-below { display: none !important; }
}
/* Form Radio */
.form_main_radio_label:has(input:checked) .form_main_radio_circle_inner {
opacity: 1;
}
/* Form Checkbox */
.form_main_checkbox_label:has(input:checked) .form_main_checkbox_box {
background-color: currentColor;
border-color: currentColor;
}
.form_main_checkbox_label:has(input:checked) .form_main_checkbox_icon {
opacity: 1;
}
/* State Manager */
[data-state] { --_state---true: 1; --_state---false: 0; }
.is-active,
[data-state~="checked"]:is(:checked, :has(:checked)),
[data-state~="current"]:is(.w--current, :has(.w--current)),
[data-state~="open"]:is(.w--open, :has(.w--open)),
[data-state~="expanded"]:is([aria-expanded="true"], :has([aria-expanded="true"])),
[data-state~="external"]:is([target="_blank"], :has([target="_blank"])) {
--_state---true: 0; --_state---false: 1;
}
.wf-design-mode [data-trigger~="preview"],
[data-trigger~="focus"]:is(:focus-visible, :has(:focus-visible)),
[data-trigger~="group"]:has([data-trigger~="focus-other"]:focus-visible, [data-trigger~="focus-other"] :focus-visible)
[data-trigger~="focus-other"]:not(:focus-visible, :has(:focus-visible)) {
--_trigger---on: 0; --_trigger---off: 1;
}
@media (hover: hover) {
[data-button]:hover,
[data-trigger~="hover"]:is(a:hover,button:hover,:has(a:hover,button:hover)),
[data-trigger~="group"]:has([data-trigger~="hover-other"]:hover) [data-trigger~="hover-other"]:not(:hover) {
--_trigger---on: 0; --_trigger---off: 1;
}
[data-trigger~="hover-other"]:hover { --_trigger---on: 1 !important; --_trigger---off: 0 !important; }
}
@media (hover: none) {
[data-trigger~="mobile"] { --_trigger---on: 0; --_trigger---off: 1; }
}
code, kbd, pre, samp {
font-family: var(--_typography---font--mono-family);
}
body * {
scrollbar-width: none; /* Firefox */
-ms-overflow-style: none; /* IE/Edge Legacy */
}
body *::-webkit-scrollbar {
display: none; /* Unreliable */
width: 0px; /* WebKit/Blink */
}
@media (prefers-color-scheme: dark) {
body,
.u-theme-ivory,
[data-wf--section--theme="ivory"] {
--_theme---background-primary: var(--swatch--gray-950);
--_theme---background-secondary: var(--swatch--gray-900);
--_theme---background-tertiary: var(--swatch--gray-850);
--_theme---border-primary: var(--swatch--gray-600);
--_theme---border-secondary: var(--swatch--gray-700);
--_theme---border-tertiary: var(--swatch--gray-750);
--_theme---foreground-primary: var(--swatch--gray-050);
--_theme---foreground-secondary: var(--swatch--gray-400);
--_theme---foreground-tertiary: var(--swatch--gray-500);
--_theme---pictogram-accent: var(--swatch--gray-750);
--_theme---button-primary--background: var(--swatch--gray-050);
--_theme---button-primary--text: var(--swatch--gray-950);
--_theme---button-primary--border: var(--swatch--transparent);
--_theme---button-primary--icon: var(--_theme---button-primary--text);
--_theme---button-primary--background-hover: var(--_theme---button-primary--background);
--_theme---button-primary--text-hover: var(--_theme---button-primary--text);
--_theme---button-primary--border-hover: var(--_theme---button-primary--border);
--_theme---button-primary--icon-hover: var(--_theme---background-primary);
--_theme---button-secondary--background: var(--swatch--gray-750);
--_theme---button-secondary--text: var(--swatch--gray-050);
--_theme---button-secondary--border: var(--_theme---border-secondary);
--_theme---button-secondary--icon: var(--_theme---button-secondary--text);
--_theme---button-secondary--background-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--text-hover: var(--_theme---button-secondary--text);
--_theme---button-secondary--border-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--icon-hover: var(--_theme---foreground-secondary);
--_theme---button-tertiary--background: var(--_theme---background-primary);
--_theme---button-tertiary--text: var(--swatch--gray-050);
--_theme---button-tertiary--border: var(--_theme---border-secondary);
--_theme---button-tertiary--icon: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--background-hover: var(--_theme---button-tertiary--background);
--_theme---button-tertiary--text-hover: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--border-hover: var(--_theme---button-tertiary--border);
--_theme---button-tertiary--icon-hover: var(--_theme---foreground-primary);
--_theme---error-text: #df6666;
--_theme---heroes-accent: #C46849;
--_theme---white: var(--_theme---background-primary);
}
.u-theme-white,
[data-wf--section--theme="white"] {
--_theme---background-primary: var(--swatch--gray-850);
--_theme---background-secondary: var(--swatch--gray-800);
--_theme---background-tertiary: var(--swatch--gray-750);
--_theme---border-primary: var(--swatch--gray-550);
--_theme---border-secondary: var(--swatch--gray-650);
--_theme---border-tertiary: var(--swatch--gray-700);
--_theme---foreground-primary: var(--swatch--gray-050);
--_theme---foreground-secondary: var(--swatch--gray-350);
--_theme---foreground-tertiary: var(--swatch--gray-450);
--_theme---pictogram-accent: var(--swatch--gray-700);
--_theme---button-primary--background: var(--swatch--gray-050);
--_theme---button-primary--text: var(--swatch--gray-950);
--_theme---button-primary--border: var(--swatch--transparent);
--_theme---button-primary--icon: var(--_theme---button-primary--text);
--_theme---button-primary--background-hover: var(--_theme---button-primary--background);
--_theme---button-primary--text-hover: var(--_theme---button-primary--text);
--_theme---button-primary--border-hover: var(--_theme---button-primary--border);
--_theme---button-primary--icon-hover: var(--_theme---background-primary);
--_theme---button-secondary--background: var(--swatch--gray-700);
--_theme---button-secondary--text: var(--swatch--gray-050);
--_theme---button-secondary--border: var(--_theme---border-secondary);
--_theme---button-secondary--icon: var(--_theme---button-secondary--text);
--_theme---button-secondary--background-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--text-hover: var(--_theme---button-secondary--text);
--_theme---button-secondary--border-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--icon-hover: var(--_theme---foreground-secondary);
--_theme---button-tertiary--background: var(--_theme---background-primary);
--_theme---button-tertiary--text: var(--swatch--gray-050);
--_theme---button-tertiary--border: var(--_theme---border-secondary);
--_theme---button-tertiary--icon: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--background-hover: var(--_theme---button-tertiary--background);
--_theme---button-tertiary--text-hover: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--border-hover: var(--_theme---button-tertiary--border);
--_theme---button-tertiary--icon-hover: var(--_theme---foreground-primary);
--_theme---error-text: #df6666;
--_theme---heroes-accent: #C46849;
--_theme---white: var(--_theme---background-primary);
}
.u-theme-neutral-1,
[data-wf--section--theme="neutral-1"] {
--_theme---background-primary: var(--swatch--gray-800);
--_theme---background-secondary: var(--swatch--gray-750);
--_theme---background-tertiary: var(--swatch--gray-700);
--_theme---border-primary: var(--swatch--gray-500);
--_theme---border-secondary: var(--swatch--gray-600);
--_theme---border-tertiary: var(--swatch--gray-650);
--_theme---foreground-primary: var(--swatch--gray-050);
--_theme---foreground-secondary: var(--swatch--gray-300);
--_theme---foreground-tertiary: var(--swatch--gray-400);
--_theme---pictogram-accent: var(--swatch--gray-650);
--_theme---button-primary--background: var(--swatch--gray-050);
--_theme---button-primary--text: var(--swatch--gray-950);
--_theme---button-primary--border: var(--swatch--transparent);
--_theme---button-primary--icon: var(--_theme---button-primary--text);
--_theme---button-primary--background-hover: var(--_theme---button-primary--background);
--_theme---button-primary--text-hover: var(--_theme---button-primary--text);
--_theme---button-primary--border-hover: var(--_theme---button-primary--border);
--_theme---button-primary--icon-hover: var(--_theme---background-primary);
--_theme---button-secondary--background: var(--swatch--gray-650);
--_theme---button-secondary--text: var(--swatch--gray-050);
--_theme---button-secondary--border: var(--_theme---border-secondary);
--_theme---button-secondary--icon: var(--_theme---button-secondary--text);
--_theme---button-secondary--background-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--text-hover: var(--_theme---button-secondary--text);
--_theme---button-secondary--border-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--icon-hover: var(--_theme---foreground-secondary);
--_theme---button-tertiary--background: var(--_theme---background-primary);
--_theme---button-tertiary--text: var(--swatch--gray-050);
--_theme---button-tertiary--border: var(--_theme---border-secondary);
--_theme---button-tertiary--icon: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--background-hover: var(--_theme---button-tertiary--background);
--_theme---button-tertiary--text-hover: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--border-hover: var(--_theme---button-tertiary--border);
--_theme---button-tertiary--icon-hover: var(--_theme---foreground-primary);
--_theme---error-text: #df6666;
--_theme---heroes-accent: #C46849;
--_theme---white: var(--_theme---background-primary);
}
.logo_light {
display: none;
}
.logo_dark {
display: block;
}
.illustration_light {
display: none;
}
.illustration_dark {
display: block;
}
}
@media (prefers-color-scheme: light) {
.logo_light {
display: block;
}
.logo_dark {
display: none;
}
.illustration_light {
display: block;
}
.illustration_dark {
display: none;
}
}
.u-text-font-mono {
--_text-style---trim-top: var(--_typography---font--mono-text-trim-top);
--_text-style---trim-bottom: var(--_typography---font--mono-text-trim-bottom);
}
.u-checklist ul {
list-style: none;
margin: 0;
padding: 0;
}
.u-checklist ul li {
position: relative;
padding-left: 2rem;
}
.u-checklist ul li::before {
content: "";
position: absolute;
left: 0;
top: 0.1em;
width: 1.5rem;
height: 1.5rem;
background-repeat: no-repeat;
background-position: center;
background-size: contain;
background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M18.226%206.13068C18.4439%205.95655%2018.7615%205.95361%2018.9842%206.13888C19.2067%206.32458%2019.2604%206.63728%2019.1283%206.88304L19.0604%206.98382L10.0602%2017.784C9.95233%2017.9133%209.7949%2017.9908%209.62665%2017.9984C9.45844%2018.0059%209.29454%2017.9429%209.17547%2017.8238L4.97541%2013.6237L4.89806%2013.53C4.7446%2013.2971%204.7705%2012.9802%204.97541%2012.7753C5.18032%2012.5704%205.49726%2012.5445%205.73011%2012.698L5.82386%2012.7753L9.55868%2016.5101L18.1393%206.21506L18.226%206.13068Z%22%20fill%3D%22%235E5D59%22/%3E%3C/svg%3E");
}
[class^="card_"][class$="_wrap"] .clickable_wrap.u-cover-absolute .clickable_link,
[class^="card_"][class$="_wrap"] .clickable_wrap.u-cover-absolute .clickable_btn {
outline-offset: var(--focus--offset-inner);
}
textarea[data-autogrow] {
overflow-y: hidden;
resize: none;
height: 1.75rem;
min-height: 0;
}
.btn_main_wrap::hover,
.btn_small_wrap::hover,
.btn_tiny_wrap::hover,
.button_toggle_wrap::hover,
.btn_icon_main_wrap::hover,
.btn_icon_small_wrap::hover,
.btn_icon_tiny_wrap::hover{
transition: /* Transition to click/active */
box-shadow ease-in-out 100ms,
background ease-in-out 100ms,
color ease-in-out 50ms;
}
.btn_main_wrap::active,
.btn_small_wrap::active,
.btn_tiny_wrap::active,
.button_toggle_wrap::active,
.btn_icon_main_wrap::active,
.btn_icon_small_wrap::active,
.btn_icon_tiny_wrap::active{
transition: /* Transition to click/active */
box-shadow ease-in-out 50ms,
background ease-in-out 50ms,
color ease-in-out 25ms;
}
.card_cs_grid_img img {
max-width: 60%;
max-height: 60%;
}
@container viewport (width < 30em) {
[data-wf--grid--column-count="4"]:has(.card_feature_wrap) .c-grid {
--_column-count---value: 1;
}
}
@container viewport (min-width: 30em) and (max-width: 62em) {
[data-wf--grid--column-count="4"]:has(.card_feature_wrap) .c-grid {
--_column-count---value: 2;
}
}
/* Mods for spacing and visibility of embed in accordian content used for schema */
.accordion_content_text p:has(+ .w-embed.w-script) {
margin-bottom: 0;
}
/* Absolute inner SVG of lottie to prevent page jump */
.heroes_lottie_component svg {
position: absolute;
top: 0;
left: 0;
}
/* Sticky scroll */
@media screen and (min-width: 992px) {
.sticky_image_link_wrap:has(.sticky_image_link.w--current) {
opacity: 1;
width: calc((100% - var(--_grid---gutter)) * (6 / 12));
}
}
@media screen and (max-width: 767px) {
.c-grid:last-child .sticky_image_block,
.sticky_image_block:last-child {
padding: 0;
}
.c-grid:last-child .sticky_image_wrap {
margin-bottom: 0;
}
}
#send, #threads, #get-help, #collaborate {
display: block; /* or grid, flex - anything but contents */
}
/* Select text below clickable overlay */
html.wf-design-mode .clickable_wrap {
pointer-events: none;
}
document.addEventListener("DOMContentLoaded", function () {
// ---------------- Config ----------------
const EDGE_PADDING = 16; // >= 1rem from edges
const OFFSET_Y = 10; // gap under trigger
const DIM_OPACITY = 0.3;
const DIM_EASE_MS = 350;
const CLOSE_DELAY = 120;
const isCoarse = () => matchMedia("(hover: none), (pointer: coarse)").matches;
// ---------------- Bubble (single instance) ----------------
function ensureBubble(){
let el = document.querySelector(".tt-bubble");
if (el) return el;
el = document.createElement("div");
el.className = "tt-bubble u-theme-white";
el.setAttribute("role","tooltip");
el.setAttribute("aria-hidden","true");
el.style.left = "0px";
el.style.top = "0px";
el.innerHTML = `
<div class="tt-inner">
<div class="tt-h" id="tt-title"></div>
<p class="tt-b" id="tt-body"></p>
<button type="button" class="tt-close" aria-label="Close">×</button>
</div>`;
document.body.appendChild(el);
return el;
}
const bubble = ensureBubble();
const elH = bubble.querySelector("#tt-title");
const elB = bubble.querySelector("#tt-body");
const elClose = bubble.querySelector(".tt-close");
// ---------------- Parse [[term|heading|body]] anywhere ----------------
const TOKEN_RE = /\[\[([^|\]]+)\|([^|\]]+)\|([^\]]+)\]\]/g;
const BLOCK_SKIP = new Set(["SCRIPT","STYLE","NOSCRIPT","TEXTAREA","INPUT","SELECT","CODE","PRE","TEMPLATE","IFRAME"]);
function shouldSkipTextNode(n){
let el = n.parentElement;
while (el){
if (BLOCK_SKIP.has(el.tagName) || el.isContentEditable) return true;
el = el.parentElement;
}
return false;
}
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
const textNodes = [];
while (walker.nextNode()){
const n = walker.currentNode;
if (!n.nodeValue || shouldSkipTextNode(n)) continue;
if (TOKEN_RE.test(n.nodeValue)) textNodes.push(n);
TOKEN_RE.lastIndex = 0;
}
textNodes.forEach(node => {
const frag = document.createDocumentFragment();
const insideLink = !!node.parentElement.closest("a");
let text = node.nodeValue, last = 0; TOKEN_RE.lastIndex = 0; let m;
while ((m = TOKEN_RE.exec(text))){
if (m.index > last) frag.appendChild(document.createTextNode(text.slice(last, m.index)));
const term=m[1].trim(), heading=m[2].trim(), body=m[3].trim();
const t = insideLink ? document.createElement("span") : document.createElement("button");
if (insideLink){ t.setAttribute("role","button"); t.setAttribute("tabindex","0"); } else { t.type="button"; }
t.className="tt-trigger";
t.textContent=term;
t.setAttribute("data-tt-h", heading);
t.setAttribute("data-tt-b", body);
t.setAttribute("aria-haspopup","dialog");
t.setAttribute("aria-expanded","false");
frag.appendChild(t);
last = TOKEN_RE.lastIndex;
}
if (last < text.length) frag.appendChild(document.createTextNode(text.slice(last)));
node.parentNode.replaceChild(frag, node);
});
// ---------------- State ----------------
let current = null;
let hoverCount = 0;
let closeTimer = null;
// Dimming bookkeeping
let dimCtx = null; // { container, dimEls:[], wrappedTexts:[], pathEls:[] }
// ---------------- Find the correct "text element" container ----------------
function findTextContainer(trigger){
// Prefer common RTE wrappers
let el = trigger.closest(".w-richtext, .rich-text, .rte, [data-rte]");
if (el) return el;
// Otherwise climb until we find an ancestor that contains multiple block nodes anywhere inside.
const BLOCK_SEL = "p,h1,h2,h3,h4,h5,h6,ul,ol,li,blockquote,pre,figure,figcaption";
el = trigger.parentElement;
while (el && el !== document.body){
const blockCount = el.querySelectorAll(BLOCK_SEL).length;
if (blockCount >= 2) return el;
el = el.parentElement;
}
// Fallback: nearest non-inline container
el = trigger.parentElement || document.body;
while (el && el !== document.body){
const d = getComputedStyle(el).display;
if (d !== "inline" && d !== "contents") return el;
el = el.parentElement;
}
return document.body;
}
// Utility: child of `ancestor` that contains `target` (direct child)
function directChildContaining(ancestor, target){
for (const ch of ancestor.children){
if (ch === target || ch.contains(target)) return ch;
}
return null;
}
function getElementTarget(e) {
// If target is already an Element, use it
if (e.target instanceof Element) return e.target;
// Otherwise, walk the composed/path for the first Element
const path = (typeof e.composedPath === 'function') ? e.composedPath() : [];
for (const n of path) if (n instanceof Element) return n;
return null;
}
// ---------------- Dim everything except the trigger branch (sibling branches only) ----------------
function dimAllOtherBranches(container, trigger){
undim(); // clear previous
const dimEls = [];
const wrappedTexts = [];
const pathEls = [];
// Build ELEMENT-only path [container -> ... -> trigger]
const path = [];
for (let el = trigger; el && el !== container; el = el.parentElement) path.push(el);
path.push(container);
path.reverse();
// At each ancestor level, find the *direct* child that leads to the trigger
for (let i = 0; i < path.length; i++){
const anc = path[i];
const branchChild = (i < path.length - 1) ? directChildContaining(anc, path[i+1]) : path[i]; // last step is the trigger itself
// Fade element siblings (whole branches)
for (const child of anc.children){
if (child === branchChild) continue; // keep the path branch crisp
// Never fade any element that is (or contains) the trigger
if (child === trigger || child.contains(trigger)) continue;
child.style.transition = `opacity ${DIM_EASE_MS}ms ease`;
child.style.opacity = String(DIM_OPACITY);
dimEls.push(child);
}
// Fade TEXT NODE siblings directly under this ancestor (outside branchChild)
anc.childNodes.forEach(node => {
if (node.nodeType !== 3) return; // text only
if (!node.nodeValue || !node.nodeValue.trim()) return;
// If this text node sits inside branchChild, skip
if (branchChild && branchChild.contains && branchChild.contains(node)) return;
const span = document.createElement("span");
span.style.transition = `opacity ${DIM_EASE_MS}ms ease`;
span.style.opacity = String(DIM_OPACITY);
span.textContent = node.nodeValue;
node.parentNode.replaceChild(span, node);
wrappedTexts.push(span);
});
// Keep a reference to the path elements (so we can explicitly restore opacity if needed)
if (anc && anc.nodeType === 1) pathEls.push(anc);
}
// Hard-guard: explicitly set opacity:1 on the entire path to neutralize any inherited fade
pathEls.forEach(el => {
el.style.opacity = "1";
});
dimCtx = { container, dimEls, wrappedTexts, pathEls };
}
function undim(){
if (!dimCtx) return;
const { dimEls, wrappedTexts, pathEls } = dimCtx;
// Animate back
dimEls.forEach(el => {
el.style.transition = `opacity ${DIM_EASE_MS}ms ease`;
el.style.opacity = "1";
// remove inline style after the animation so we don't override site CSS
setTimeout(() => { if (el) el.style.opacity = ""; }, DIM_EASE_MS + 50);
});
wrappedTexts.forEach(span => {
span.style.transition = `opacity ${DIM_EASE_MS}ms ease`;
span.style.opacity = "1";
span.addEventListener("transitionend", () => {
if (!span.parentNode) return;
span.parentNode.replaceChild(document.createTextNode(span.textContent || ""), span);
}, { once:true });
});
// Clear hard-guard on path
pathEls.forEach(el => { if (el) el.style.opacity = ""; });
dimCtx = null;
}
// ---------------- Positioning (centered, edge-aware, flip) ----------------
function clamp(v,min,max){ return Math.max(min,Math.min(max,v)); }
function measureBubbleForPlacement(){
const wasOpen = bubble.classList.contains("is-open");
if (!wasOpen){ bubble.style.visibility="hidden"; bubble.classList.add("is-open"); }
const rect = bubble.getBoundingClientRect();
if (!wasOpen){ bubble.classList.remove("is-open"); bubble.style.visibility=""; }
return { w: rect.width, h: rect.height };
}
function placeAnchored(trigger){
const vw=innerWidth, vh=innerHeight;
const r = trigger.getBoundingClientRect();
const { w, h } = measureBubbleForPlacement();
let left = r.left + (r.width/2) - (w/2);
left = clamp(left, EDGE_PADDING, Math.max(EDGE_PADDING, vw - EDGE_PADDING - w));
const topBelow = r.bottom + OFFSET_Y;
const spaceBelow = vh - topBelow - EDGE_PADDING;
const placeBelow = spaceBelow >= h;
let top = placeBelow ? topBelow : (r.top - h - OFFSET_Y);
top = clamp(top, EDGE_PADDING, Math.max(EDGE_PADDING, vh - EDGE_PADDING - h));
bubble.style.left = left + "px";
bubble.style.top = top + "px";
const br = bubble.getBoundingClientRect();
if (br.bottom > vh - EDGE_PADDING){
bubble.style.maxHeight = (vh - 2*EDGE_PADDING) + "px";
bubble.style.overflowY = "auto";
} else {
bubble.style.maxHeight = "none";
bubble.style.overflowY = "visible";
}
}
// ---------------- Open / Close (place → fade/scale) ----------------
function animateIn(){
bubble.style.transition = "none";
bubble.style.opacity = "0";
bubble.style.transform = "scale(0.95)";
void bubble.offsetWidth;
bubble.style.transition = "opacity .18s ease, transform .18s ease";
bubble.style.opacity = "1";
bubble.style.transform = "scale(1)";
}
function animateOut(done){
bubble.style.transition = "opacity .16s ease, transform .16s ease";
bubble.style.opacity = "0";
bubble.style.transform = "scale(0.95)";
const end = () => { bubble.removeEventListener("transitionend", end); done && done(); };
bubble.addEventListener("transitionend", end);
setTimeout(end, 260);
}
function openFromTrigger(trigger){
if (current && current !== trigger) forceClose();
current = trigger;
trigger.setAttribute("aria-expanded","true");
elH.textContent = trigger.getAttribute("data-tt-h") || "";
elB.textContent = trigger.getAttribute("data-tt-b") || "";
bubble.classList.add("is-open");
bubble.setAttribute("aria-hidden","false");
placeAnchored(trigger);
animateIn();
const container = findTextContainer(trigger);
dimAllOtherBranches(container, trigger);
hoverCount = 0;
cancelCloseTimer();
}
function forceClose(){
if (!current) return;
bubble.classList.remove("is-open");
bubble.setAttribute("aria-hidden","true");
current.setAttribute("aria-expanded","false");
current = null;
undim();
hoverCount = 0;
cancelCloseTimer();
}
function closeWithAnim(){
if (!current) return;
const t = current;
animateOut(() => {
bubble.classList.remove("is-open");
bubble.setAttribute("aria-hidden","true");
t.setAttribute("aria-expanded","false");
current = null;
undim();
});
}
function scheduleClose(){
cancelCloseTimer();
closeTimer = setTimeout(() => {
if (hoverCount <= 0 && !isCoarse()) closeWithAnim();
}, CLOSE_DELAY);
}
function cancelCloseTimer(){ if (closeTimer){ clearTimeout(closeTimer); closeTimer = null; } }
// ---------------- Hover-intent (desktop) ----------------
function onZoneEnter(){ if (isCoarse()) return; hoverCount++; cancelCloseTimer(); }
function onZoneLeave(){ if (isCoarse()) return; hoverCount = Math.max(0, hoverCount - 1); if (hoverCount === 0) scheduleClose(); }
bubble.addEventListener("pointerenter", onZoneEnter, true);
bubble.addEventListener("mouseenter", onZoneEnter, true);
bubble.addEventListener("pointerleave", onZoneLeave, true);
bubble.addEventListener("mouseleave", onZoneLeave, true);
const handleEnter = (e) => {
if (isCoarse()) return;
const target = getElementTarget(e);
if (!target) return;
const t = target.closest(".tt-trigger");
if (!t) return;
onZoneEnter();
if (!current || current !== t) openFromTrigger(t);
};
const handleLeave = (e) => {
if (isCoarse()) return;
const target = getElementTarget(e);
if (!target) return;
const t = target.closest(".tt-trigger");
if (!t) return;
onZoneLeave();
};
document.addEventListener("pointerenter", handleEnter, true);
document.addEventListener("mouseenter", handleEnter, true);
document.addEventListener("pointerleave", handleLeave, true);
document.addEventListener("mouseleave", handleLeave, true);
// ---------------- Keyboard ----------------
document.addEventListener("focusin", (e) => {
if (!e.target) return;
const t = e.target.closest(".tt-trigger");
if (t) openFromTrigger(t);
});
document.addEventListener("focusout", (e) => {
if (!e.target) return;
const t = e.target.closest(".tt-trigger");
if (t && current === t) closeWithAnim();
});
// ---------------- Mobile / coarse ----------------
document.addEventListener("pointerdown", (e) => {
if (!isCoarse()) return;
const t = e.target.closest(".tt-trigger");
if (!t) return;
e.preventDefault();
e.stopPropagation();
if (current === t && bubble.classList.contains("is-open")) { closeWithAnim(); return; }
openFromTrigger(t);
}, true);
document.addEventListener("click", (e) => {
if (!isCoarse()) return;
if (!bubble.classList.contains("is-open")) return;
const inBubble = !!e.target.closest(".tt-bubble");
const onTrigger = !!e.target.closest(".tt-trigger");
if (!inBubble && !onTrigger) closeWithAnim();
}, true);
// Close button + ESC
elClose.addEventListener("click", closeWithAnim);
document.addEventListener("keydown", (e) => { if (e.key === "Escape") closeWithAnim(); });
// Reposition on resize/scroll while open
const reposition = () => { if (!current) return; placeAnchored(current); };
addEventListener("resize", reposition, { passive: true });
addEventListener("scroll", reposition, { passive: true });
});
/* Tooltip Styles */
/* Trigger */
.tt-trigger {
cursor: help;
text-decoration: underline dotted;
text-underline-offset: .2em;
color: inherit;
}
.tt-trigger:focus-visible{ outline:2px solid currentColor; outline-offset:2px; }
/* Bubble */
.tt-bubble{
position: fixed;
z-index: 10;
max-width: 17rem;
background: var(--_theme---background-primary);
box-shadow: 0 4px 24px rgba(0,0,0,.05);
border-radius: var(--radius--large);
border-style: solid;
border-color: var(--_theme---border-tertiary);
padding: var(--_spacing---space--1-5rem);
pointer-events: none;
opacity: 0;
transform: translate3d(0,0,0) scale(.98);
transition: opacity .3s ease, transform .3s ease;
will-change: transform, opacity;
}
.tt-bubble.is-open{ opacity:1; transform:translate3d(0,0,0) scale(1); pointer-events:auto; }
.tt-h{
margin-bottom: var(--_spacing---space--0-5rem);
font-size: var(--_typography---font-size--body-3);
font-family: var(--_typography---font--secondary-family);
line-height: var(--_typography---line-height--1-6);
color: var(--_theme---foreground-primary);
}
.tt-b{
margin:0;
font-size: var(--_typography---font-size--caption);
line-height: var(--_typography---line-height--1-6);
color: var(--_theme---foreground-tertiary);
}
/* Mobile close button */
.tt-close {
display: none;
}
@media (hover: none), (pointer: coarse) {
.tt-close {
display: inline-flex;
position: absolute;
top: 0.5rem;
right: 0.5rem;
width: 32px;
height: 32px;
align-items: center;
justify-content: center;
border: 0;
border-radius: 999px;
background: transparent;
font-size: 22px;
line-height: 1;
color: inherit;
cursor: pointer;
touch-action: manipulation;
}
.tt-close:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
.tt-close:hover { opacity: 1; }
}
html[lang="de-DE"] h1, html[lang="de-DE"] h2, html[lang="de-DE"] h3,
html[lang="de-DE"] h4, html[lang="de-DE"] h5, html[lang="de-DE"] h6,
html[lang="de-DE"] p, html[lang="de-DE"] li,
html[lang="fr-FR"] h1, html[lang="fr-FR"] h2, html[lang="fr-FR"] h3,
html[lang="fr-FR"] h4, html[lang="fr-FR"] h5, html[lang="fr-FR"] h6,
html[lang="fr-FR"] p, html[lang="fr-FR"] li {
overflow-wrap: break-word;
hyphens: auto;
}
:root {
--nav--icon-thickness: var(--border-width--main);
--nav--hamburger-thickness: var(--nav--icon-thickness);
--nav--hamburger-gap: var(--_spacing---space--0-25rem);
--nav--hamburger-rotate: 45;
--nav--dropdown-duration: 300ms;
--nav--dropdown-open-duration: 600ms;
--nav--dropdown-delay: 0ms;
--ease-expo-out: cubic-bezier(0.16, 1, 0.3, 1);
}
/* ========== GENERAL RESPONSIVE RULES ========== */
/* Lock body when nav is open (script toggles .is-nav-open) */
@media (width < 56em) {
body.is-nav-open { overflow: hidden; }
}
@container (min-width: 56em) {
.nav_wrap.is-desktop { display: block; }
.nav_wrap.is-mobile { display: none; }
}
@container (width < 28em) {
.nav_mobile_layout .nav_actions_mobile { display: none; }
}
/* ========== DROPDOWN STYLING ========== */
html:not(.wf-design-mode) .nav_dropdown_component > .w-dropdown-list {
display: grid !important;
grid-template-columns: minmax(0, 1fr);
grid-template-rows: 0fr;
transition:
grid-template-rows var(--nav--dropdown-duration) var(--ease-expo-out),
visibility 0s var(--nav--dropdown-duration),
opacity var(--nav--dropdown-duration) var(--ease-expo-out);
visibility: hidden;
opacity: 0;
}
html:not(.wf-design-mode) .nav_dropdown_component > .w-dropdown-list.w--open {
visibility: visible;
opacity: 1;
transition:
grid-template-rows var(--nav--dropdown-duration) var(--ease-expo-out),
visibility 0s 0s,
opacity var(--nav--dropdown-duration) var(--ease-expo-out);
}
.nav_dropdown_component > .w-dropdown-list > * { overflow: hidden; }
.nav_dropdown_component:has(> .w-dropdown-toggle[aria-expanded="true"]) > .w-dropdown-list {
--nav--dropdown-duration: var(--nav--dropdown-open-duration);
grid-template-rows: 1fr;
}
/*.nav_wrap.is-desktop:has(.nav_dropdown_component > .w-dropdown-toggle.w--open[aria-expanded="false"])
.nav_dropdown_component:has(> .w--open[aria-expanded="true"]) > .w-dropdown-list {
transition-delay: var(--nav--dropdown-duration);
}*/
/* Dropdown caret rotation */
.nav_links_svg.is-desktop { transition: transform 750ms var(--ease-expo-out); }
.w-dropdown-toggle[aria-expanded="true"] .nav_links_svg.is-desktop { transform: rotate(-180deg); }
.nav_links_svg_line.is-2 { transition: transform 500ms var(--ease-expo-out); }
.w-dropdown-toggle[aria-expanded="true"] .nav_links_svg_line.is-2 { transform: rotate(0deg); }
/* open (replicates your original transforms) */
.nav_btn_wrap[aria-expanded="true"] .nav_btn_line:nth-child(1),
.nav_btn_wrap[aria-expanded="true"] > * > :first-child {
transform:
translateY(calc(var(--nav--hamburger-thickness) * 1 + var(--nav--hamburger-gap) * 1))
rotate(calc(var(--nav--hamburger-rotate) * -1deg));
}
.nav_btn_wrap[aria-expanded="true"] .nav_btn_line:nth-child(2),
.nav_btn_wrap[aria-expanded="true"] > * > :nth-child(2) {
opacity: 0;
}
.nav_btn_wrap[aria-expanded="true"] .nav_btn_line:nth-child(3),
.nav_btn_wrap[aria-expanded="true"] > * > :last-child {
transform:
translateY(calc(var(--nav--hamburger-thickness) * -1 + var(--nav--hamburger-gap) * -1))
rotate(calc(var(--nav--hamburger-rotate) * 1deg));
width: 1rem;
}
/* ========== HOVER & THEME EFFECTS ========== */
@media (hover: hover) and (pointer: fine) {
body:has(.nav_dropdown_item:hover) .nav_dropdown_item:not(:hover) > * > * {
color: var(--_theme---foreground-tertiary);
}
.nav_dropdown_link {
transition:
background-color 300ms ease,
color 300ms ease;
}
.nav_dropdown_item:hover .nav_dropdown_link {
background: var(--_theme---background-tertiary);
color: var(--_theme---foreground-primary);
}
.nav_secondary_wrap .nav_dropdown_item:hover .nav_dropdown_link {
background: var(--_theme---background-tertiary);
color: var(--_theme---foreground-primary);
}
.nav_wrap.is-mobile .nav_dropdown_item:hover .nav_dropdown_link {
color: var(--_theme---foreground-primary);
}
.nav_links_text { transition: color 500ms var(--ease-expo-out); }
.nav_links_svg {
transition:
transform 500ms var(--ease-expo-out),
color 500ms var(--ease-expo-out);
}
.nav_links_item:hover .nav_links_text,
.nav_links_item:hover .nav_links_svg { color: var(--_theme---foreground-primary); }
}
/* ========== LAYOUT / UTILITY (kept, de-Webflow’d) ========== */
.nav_wrap.is-mobile [data-open-on-mobile] > .w-dropdown-toggle { display: none; }
.nav_wrap.is-mobile [data-open-on-mobile] > .w-dropdown-list {
visibility: visible;
opacity: 1;
display: block;
grid-template-rows: 1fr;
}
.nav_buttons_item .button_main_wrap { width: 100%; min-width: max-content; }
/* Optional: fade out mobile actions while open */
.nav_actions_wrap { transition: opacity 500ms var(--ease-expo-out); }
body.is-nav-open .nav_actions_mobile .nav_actions_wrap {
opacity: 0;
pointer-events: none;
}
.nav_links_item:first-child {
border-top: none;
}
/* ========== Breadcrumbs ========== */
.breadcrumb_text.is_linked[href="#"],
.breadcrumb_text:has(+.breadcrumb_text.is_linked:not([href="#"])) {
display: none;
}
.breadcrumb_text.is_linked:not([href="#"]) {
display: block;
}
document.addEventListener("DOMContentLoaded", function () {
document.querySelectorAll(".nav_component").forEach((root) => {
if (root.dataset.scriptInitialized) return;
root.dataset.scriptInitialized = "true";
if (!window.gsap) { console.error("GSAP not found"); return; }
const btn = root.querySelector('.nav_btn_wrap');
const menu = root.querySelector('.nav_menu_wrap');
if (!btn || !menu) { console.warn('Missing .nav_btn_wrap or .nav_menu_wrap in', root); return; }
// a11y setup (scoped)
if (!btn.hasAttribute('type')) btn.setAttribute('type', 'button');
if (!btn.hasAttribute('aria-expanded')) btn.setAttribute('aria-expanded', 'false');
if (!menu.id) menu.id = 'primary-nav-' + Math.random().toString(36).slice(2);
if (!btn.hasAttribute('aria-controls')) btn.setAttribute('aria-controls', menu.id);
menu.setAttribute('aria-hidden', 'true');
// targets (scoped)
const items = Array.from(menu.querySelectorAll('.nav_links_item'));
const actions = menu.querySelector('.nav_menu_actions_wrap');
// feature detection
const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
const canClipInset = !!(window.CSS && CSS.supports && (
CSS.supports('clip-path','inset(0 0 100% 0)') || CSS.supports('-webkit-clip-path','inset(0 0 100% 0)')
));
const useClip = canClipInset && !prefersReduced;
// durations from CSS vars
function readDur(varName, fallbackSec) {
const v = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();
if (!v) return fallbackSec;
if (v.endsWith('ms')) return parseFloat(v)/1000;
if (v.endsWith('s')) return parseFloat(v);
const n = parseFloat(v);
return isNaN(n) ? fallbackSec : n;
}
const OPEN_DUR = readDur('--nav--menu-open-duration', 0.8);
const CLOSE_DUR = readDur('--nav--menu-close-duration', 0.4);
// state per component
let isOpen = false;
let current = null;
function setMenuVisibleForAnim() {
menu.style.display = 'flex'; // ensure it's shown before anim
menu.removeAttribute('hidden');
menu.setAttribute('aria-hidden', 'false');
menu.style.willChange = useClip ? 'clip-path' : 'transform, opacity';
}
function clearMenuInline() {
gsap.set(menu, { clearProps: 'clipPath,webkitClipPath,opacity,transform,willChange,pointerEvents' });
}
// OPEN
function playOpen() {
setMenuVisibleForAnim();
menu.style.pointerEvents = 'none';
document.body.classList.add('is-nav-open');
btn.setAttribute('aria-expanded', 'true');
if (useClip) {
gsap.set(menu, { clipPath: 'inset(0 0 100% 0)', webkitClipPath: 'inset(0 0 100% 0)' });
} else {
gsap.set(menu, { yPercent: -2, opacity: 0 });
}
if (items.length) gsap.set(items, { y: 20, autoAlpha: 0 });
if (actions) gsap.set(actions, { y: 20, autoAlpha: 0 });
const tl = gsap.timeline({ defaults: { ease: 'power3.out' } });
if (useClip) {
tl.to(menu, {
clipPath: 'inset(0 0 0% 0)',
webkitClipPath: 'inset(0 0 0% 0)',
duration: prefersReduced ? 0.01 : OPEN_DUR,
ease: 'expo.out'
}, 0);
} else {
tl.to(menu, { yPercent: 0, opacity: 1, duration: prefersReduced ? 0.01 : Math.min(OPEN_DUR, 0.36) }, 0.02);
}
if (items.length) {
tl.to(items, { y: 0, autoAlpha: 1, stagger: prefersReduced ? 0 : 0.08, duration: prefersReduced ? 0.01 : 0.4 }, 0.10);
}
if (actions) {
const base = 0.10 + (items.length ? items.length * (prefersReduced ? 0 : 0.08) : 0);
tl.to(actions, { y: 0, autoAlpha: 1, duration: prefersReduced ? 0.01 : 0.4 }, base);
}
tl.add(() => { menu.style.pointerEvents = 'auto'; }, '>-0.1');
// listeners (per open)
document.addEventListener('keydown', onKeydown);
menu.addEventListener('click', onMenuLinkClick);
return tl;
}
// CLOSE (fade all together, then clip inset close)
function playClose() {
menu.style.pointerEvents = 'none';
btn.setAttribute('aria-expanded', 'false');
document.body.classList.remove('is-nav-open');
const tl = gsap.timeline({ defaults: { ease: 'power3.out' } });
const fadeTargets = items.concat(actions ? [actions] : []);
if (fadeTargets.length) tl.to(fadeTargets, { autoAlpha: 0, y: 0, duration: prefersReduced ? 0.01 : 0.2 }, 0);
if (useClip) {
gsap.set(menu, { clipPath: 'inset(0 0 0% 0)', webkitClipPath: 'inset(0 0 0% 0)' });
tl.to(menu, {
clipPath: 'inset(0 0 100% 0)',
webkitClipPath: 'inset(0 0 100% 0)',
duration: prefersReduced ? 0.01 : CLOSE_DUR
}, '>-0.02');
} else {
tl.to(menu, { yPercent: -2, opacity: 0, duration: prefersReduced ? 0.01 : Math.min(CLOSE_DUR, 0.28) }, '>-0.02');
}
tl.add(() => {
menu.style.display = 'none';
menu.setAttribute('aria-hidden', 'true');
clearMenuInline();
if (items.length) gsap.set(items, { clearProps: 'all' });
if (actions) gsap.set(actions, { clearProps: 'all' });
// remove listeners added on open
document.removeEventListener('keydown', onKeydown);
menu.removeEventListener('click', onMenuLinkClick);
});
return tl;
}
function openMenu() {
if (isOpen) return;
isOpen = true;
if (current && current.isActive()) current.kill();
current = playOpen();
}
function closeMenu() {
if (!isOpen) return;
isOpen = false;
if (current && current.isActive()) current.kill();
current = playClose();
}
function onKeydown(e){ if (e.key === 'Escape' && isOpen) { e.preventDefault(); closeMenu(); } }
function onMenuLinkClick(e){
const a = e.target.closest('a[href]');
if (!a) return;
const url = new URL(a.href, location.href);
if (url.origin === location.origin) {
e.preventDefault();
const tl = playClose();
tl.eventCallback('onComplete', () => { window.location.href = a.href; });
isOpen = false;
}
}
// Toggle (scoped)
btn.addEventListener('click', () => (isOpen ? closeMenu() : openMenu()));
// Normalize if visible on load (scoped)
if (getComputedStyle(menu).display !== 'none') {
btn.setAttribute('aria-expanded', 'true');
menu.setAttribute('aria-hidden', 'false');
document.body.classList.add('is-nav-open');
isOpen = true;
}
});
});
(function () {
'use strict';
// ---------- tiny utils ----------
var NS = 'navBundleInit';
function onceFlag(el, k){ k=k||'scriptInitialized'; if (el.dataset[k]) return true; el.dataset[k]='true'; return false; }
function ready(fn){ if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',fn,{once:true});} else { fn(); } }
// ---------- 1) Ask Claude about this page ----------
function initAskPage(){
var buttons = document.querySelectorAll('[data-ask-page]');
if (!buttons.length) return; // Early exit if no buttons
buttons.forEach(function(btn){
if (onceFlag(btn, NS)) return;
btn.addEventListener('click', function (e) {
e.preventDefault();
var pageUrl = window.location.href;
var prompt = "Read this page " + pageUrl + " so that I can ask you questions about it";
var claudeUrl = new URL('https://claude.ai/new');
claudeUrl.searchParams.set('q', prompt);
window.open(claudeUrl.toString(), '_blank', 'noopener');
});
});
}
// ---------- 2) Copy page content as Markdown (Turndown) ----------
var _turndownReady;
function ensureTurndown(){
if (window.TurndownService) return Promise.resolve();
if (_turndownReady) return _turndownReady;
_turndownReady = new Promise(function(resolve, reject){
var s = document.createElement('script');
s.src = 'https://unpkg.com/turndown/dist/turndown.js';
s.async = true;
s.onload = function(){ resolve(); };
s.onerror = function(){ reject(new Error('Failed to load Turndown')); };
document.head.appendChild(s);
});
return _turndownReady;
}
function initCopyAsMarkdown(){
var copyButton = document.getElementById('copy-as-markdown');
if (!copyButton) return; // Early exit
if (onceFlag(copyButton, NS)) return;
var buttonTextEl = copyButton.querySelector('.nav_dropdown_text') || copyButton;
var originalText = buttonTextEl.textContent;
copyButton.addEventListener('click', function(){
ensureTurndown().then(function(){
try {
var TurndownService = window.TurndownService;
var turndownService = new TurndownService({
headingStyle: 'atx',
codeBlockStyle: 'fenced',
fence: '```',
emDelimiter: '*',
strongDelimiter: '**',
linkStyle: 'inlined'
});
// Skip junk
turndownService.addRule('skipWebflowElements', {
filter: function(node){
return node.nodeName === 'SCRIPT' ||
node.nodeName === 'STYLE' ||
(node.className && (String(node.className).includes('w-editor') || String(node.className).includes('w-embed')));
},
replacement: function(){ return ''; }
});
buttonTextEl.textContent = 'Copying...';
copyButton.disabled = true;
var contentElement = document.querySelector('main') ||
document.querySelector('.main-content') ||
document.querySelector('body');
if (!contentElement) throw new Error('No content found to copy');
var cloned = contentElement.cloneNode(true);
cloned.querySelectorAll('script, style, nav, footer, .w-nav, .footer').forEach(function(el){ el.remove(); });
var markdown = turndownService.turndown(cloned);
var done = function(){
buttonTextEl.textContent = 'Copied!';
setTimeout(function(){
buttonTextEl.textContent = originalText;
copyButton.disabled = false;
}, 2000);
};
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard.writeText(markdown).then(done, function(err){ throw err; });
} else {
var ta = document.createElement('textarea');
ta.value = markdown; ta.style.position='fixed'; ta.style.opacity='0';
document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta);
done();
}
} catch (err){
console.error('Copy failed:', err);
buttonTextEl.textContent = 'Copy failed';
setTimeout(function(){
buttonTextEl.textContent = originalText;
copyButton.disabled = false;
}, 2000);
}
}).catch(function(err){
console.error('Turndown load failed:', err);
buttonTextEl.textContent = 'Copy failed';
setTimeout(function(){
buttonTextEl.textContent = originalText;
copyButton.disabled = false;
}, 2000);
});
});
}
// ---------- init all ----------
ready(function(){
initAskPage();
initCopyAsMarkdown();
});
// Optional: expose minimal API for debugging (comment out in production if not needed)
// window.NavBundle = {
// initCopyAsMarkdown: initCopyAsMarkdown,
// initAskPage: initAskPage
// };
})();
Explore here
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
THUMBNAIL BG COLORS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
[data-thumbnail-bg="Clay"] { background-color: var(--swatch--clay); }
[data-thumbnail-bg="Cactus"] { background-color: var(--swatch--cactus); }
[data-thumbnail-bg="Coral"] { background-color: var(--swatch--coral); }
[data-thumbnail-bg="Fig"] { background-color: var(--swatch--fig); }
[data-thumbnail-bg="Heather"] { background-color: var(--swatch--heather); }
[data-thumbnail-bg="Oat"] { background-color: var(--swatch--oat); }
[data-thumbnail-bg="Olive"] { background-color: var(--swatch--olive); }
[data-thumbnail-bg="Sky"] { background-color: var(--swatch--sky); }
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
CONDITIONAL STYLES BASED ON IF IMAGE OR VIDEO ARE VISIBLE
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
.hero_tutorial_post_wrap:has(+ .tutorial_post_media_wrap :is(.tutorial_post_image_wrap, .tutorial_post_video_wrap):not(.w-condition-invisible)) {
border-bottom: none !important;
}
.tutorial_post_media_wrap:has(+ .tutorial_post_wrap:not(.w-condition-invisible)) .u-section-spacer {
display: none !important;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
TABLE OF CONTENTS
Adding here so classes don't get accidentally cleared
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
.tutorial_post_toc_list {
color: var(--_theme---foreground-tertiary);
font-size: var(--_typography---font-size--body-3);
}
.tutorial_post_toc_item {
margin-left: -0.0625rem;
padding-top: var(--_spacing---space--0-25rem);
padding-bottom: var(--_spacing---space--0-25rem);
padding-left: var(--_spacing---space--1rem);
border-left-style: solid;
border-left-width: var(--border-width--main);
border-left-color: var(--_theme---border-secondary);
}
.tutorial_post_toc_item.active {
border-left-color: var(--_theme---heroes-accent);
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
ANCHOR LINK
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* offset for <span class="anchor"> that takes fixed header height into account */
.anchor {
position: relative;
top: calc(-1 * var(--_spacing---space--4rem) - 120px);
}
/* Copy anchor link to clipboard button */
.anchor-link-box {
/* quick btn reset */
background: none;
border: none;
padding: 0;
cursor: pointer;
/* other styles */
position: absolute !important;
left: -3rem;
top: 50%;
transform: translateY(-50%);
opacity: 0;
transition: opacity 0.2s ease;
width: 2.5rem;
height: 2.5rem;
background: var(--_theme---background-tertiary);
border: var(--border-width--main) solid var(--_theme---border-tertiary);
border-radius: var(--radius--main);
display: flex;
align-items: center;
justify-content: center;
padding: var(--_spacing---space--0-5rem);
}
.anchor-link-box:hover {
opacity: 1;
}
.tooltip {
opacity: 0;
transition: opacity 0.2s ease;
position: absolute;
left: 50%;
bottom: calc(100% + 0.5rem);
transform: translateX(-50%);
background: var(--_theme---button-primary--background);
color: var(--_theme---button-primary--text);
white-space: nowrap;
padding: 0.125rem 0.5rem;
border-radius: var(--radius--x-small);
font-family: var(--_typography---font--primary-family);
font-size: var(--_typography---font-size--caption);
line-height: var(--_typography---line-height--1-6);
}
.tooltip.active {
opacity: 1;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
HIDE EMPTY <p> TAGS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
p:empty,
p:has(> br:only-child) {
display: none;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
BORDER RADIUS ON RICH TEXT VIDEOS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
.w-richtext-figure-type-video {
border-radius: var(--radius--main);
overflow: hidden;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
FIX GRID SPACING IF TUTORIAL HAS NO VIDEO
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
.tutorial_post_video_layout:has(.w-dyn-bind-empty) {
display: none;
}
document.addEventListener('DOMContentLoaded', function() {
// Helper function to convert text to slug
function textToSlug(text) {
return text
.toLowerCase()
.trim()
.replace(/[''"&]/g, '')
.replace(/"([^"]+)"/, '$1')
.replace(/\s*[:.,?—–\\/-]\s*/g, '-')
.replace(/\s+/g, '-')
.replace(/-+/g, '-')
.replace(/^-+|-+$/g, '');
}
// Track used slugs to prevent duplicate IDs
const usedSlugs = new Set();
function getUniqueSlug(baseSlug) {
let slug = baseSlug;
let counter = 1;
while (usedSlugs.has(slug)) {
slug = `${baseSlug}-${counter}`;
counter++;
}
usedSlugs.add(slug);
return slug;
}
// Add/Remove class helper functions
const addClass = (element, className) => {
if (element && className) {
element.classList.add(className);
}
};
const removeClass = (element, className) => {
if (element && className) {
element.classList.remove(className);
}
};
// Debounce helper for resize events
function debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
// Get elements
const tutorialContent = document.getElementById('tutorial_content');
const tocContainer = document.getElementById('tutorial_toc');
if (!tutorialContent || !tocContainer) {
return;
}
const h2Elements = tutorialContent.querySelectorAll('h2');
if (h2Elements.length === 0) {
tocContainer.style.display = 'none';
return;
}
// Create ToC list
const tocList = document.createElement('ul');
addClass(tocList, 'tutorial_post_toc_list');
const tocItems = [];
// Copy anchor link to clipboard with tooltip
const copyAnchorToClipboard = (element, spanElement, mouseEnterTime = 750) => {
let hoverTimeout;
let tooltip;
element.addEventListener("mouseenter", function () {
clearTimeout(hoverTimeout);
tooltip = document.createElement("span");
addClass(tooltip, 'tooltip');
tooltip.innerText = "Copy anchor link";
this.appendChild(tooltip);
hoverTimeout = setTimeout(() => {
addClass(tooltip, "active");
}, mouseEnterTime);
});
element.addEventListener("mouseleave", function () {
clearTimeout(hoverTimeout);
if (tooltip) {
removeClass(tooltip, "active");
this.removeChild(tooltip);
tooltip = null;
}
});
element.addEventListener("click", function (event) {
event.preventDefault();
clearTimeout(hoverTimeout);
if (spanElement && spanElement.classList.contains("anchor")) {
const id = spanElement.id;
if (tooltip) {
tooltip.innerText = "Copied!";
addClass(tooltip, "active");
const url = new URL(window.location.href);
url.searchParams.delete("topic");
const anchorLink = `${url.origin}${url.pathname}#${id}`;
if (navigator && navigator.clipboard) {
navigator.clipboard.writeText(anchorLink).catch((err) => {
console.error("Could not copy text: ", err);
});
}
hoverTimeout = setTimeout(() => {
removeClass(tooltip, "active");
}, 1500);
}
} else {
console.error("Couldn't find Span with the ID");
}
});
};
// Anchor link SVG icon
const anchorLinkSVG = `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M7.59608 7.99088C9.01909 7.43035 10.5884 7.86617 11.5326 8.96256L11.7123 9.19108C11.7695 9.27004 11.8243 9.35165 11.8754 9.4362L12.018 9.69792L12.0531 9.79362C12.1116 10.0184 12.0068 10.2611 11.7904 10.3678C11.5738 10.4744 11.3168 10.4098 11.1742 10.2262L11.1205 10.1403L11.018 9.95377C10.9816 9.8936 10.9434 9.83515 10.9027 9.77897L10.7738 9.61491C10.0992 8.83195 8.97855 8.52172 7.96327 8.92155C6.67866 9.42757 6.04713 10.8791 6.55311 12.1637L7.83631 15.4206C8.34249 16.7049 9.794 17.3357 11.0785 16.8298C12.3629 16.3236 12.9937 14.8721 12.4877 13.5876L12.3969 13.3551C12.2957 13.0983 12.4213 12.808 12.6781 12.7067C12.935 12.6055 13.2253 12.732 13.3265 12.9889L13.4183 13.2214C14.1268 15.0198 13.2432 17.052 11.4447 17.7604C9.64625 18.4688 7.61412 17.5852 6.90565 15.7868L5.62245 12.5299C4.91434 10.7317 5.79792 8.69938 7.59608 7.99088ZM8.55506 2.23991C10.3536 1.53146 12.3857 2.41505 13.0941 4.21354L14.3773 7.4694C15.0857 9.26779 14.202 11.2999 12.4037 12.0085C10.9807 12.569 9.41236 12.1332 8.46815 11.0368L8.28749 10.8092C8.17297 10.6512 8.07027 10.481 7.98182 10.3014C7.86013 10.0539 7.96206 9.75458 8.20936 9.63249C8.4571 9.5105 8.7573 9.61229 8.87928 9.86002C8.9425 9.98839 9.0156 10.1089 9.09706 10.2214L9.22596 10.3844C9.90056 11.1677 11.022 11.4788 12.0375 11.0788C13.3218 10.5727 13.9524 9.12105 13.4467 7.83659L12.1644 4.57975C11.6584 3.29511 10.2059 2.66356 8.92128 3.1696C7.63695 3.67569 7.00633 5.12732 7.5121 6.41178L7.60389 6.64518C7.70479 6.902 7.57845 7.19247 7.32167 7.29362C7.06479 7.39475 6.77446 7.26823 6.67323 7.01139L6.58143 6.77897C5.87303 4.98058 6.75677 2.94846 8.55506 2.23991Z" fill="currentColor"/></svg>`;
// Process each H2 and build ToC
h2Elements.forEach((h2) => {
const headingText = h2.textContent;
const baseSlug = textToSlug(headingText);
const slug = getUniqueSlug(baseSlug);
// Add anchor span
const anchorSpan = document.createElement('span');
anchorSpan.id = slug;
addClass(anchorSpan, 'anchor');
h2.prepend(anchorSpan);
// Add anchor link box
const anchorLinkBox = document.createElement('button');
anchorLinkBox.type = 'button';
addClass(anchorLinkBox, 'anchor-link-box');
anchorLinkBox.innerHTML = anchorLinkSVG;
h2.prepend(anchorLinkBox);
// Initialize copy functionality
copyAnchorToClipboard(anchorLinkBox, anchorSpan);
// Create ToC item
const listItem = document.createElement('li');
addClass(listItem, 'tutorial_post_toc_item');
const link = document.createElement('a');
link.href = `#${slug}`;
const textDiv = document.createElement('div');
textDiv.textContent = headingText;
link.appendChild(textDiv);
listItem.appendChild(link);
tocList.appendChild(listItem);
tocItems.push({
element: listItem,
target: h2
});
});
tocContainer.appendChild(tocList);
// Configuration
const headerHeight = 134;
const activationOffset = 100;
// State
let currentActive = 0;
let ranges = [];
let frameRequested = false;
// Calculate activation ranges using getBoundingClientRect for reliability
// (offsetTop can be relative to offsetParent, not document)
function calculateRanges() {
const scrollY = window.scrollY;
ranges = tocItems.map((item, index) => {
const rect = item.target.getBoundingClientRect();
const absoluteTop = rect.top + scrollY;
const activationPoint = absoluteTop - headerHeight - activationOffset;
const nextAbsoluteTop = index < tocItems.length - 1
? tocItems[index + 1].target.getBoundingClientRect().top + scrollY
: Infinity;
const nextActivation = nextAbsoluteTop === Infinity
? Infinity
: nextAbsoluteTop - headerHeight - activationOffset;
return {
index: index,
start: Math.max(0, activationPoint),
end: nextActivation
};
});
}
// Update active section
function updateActiveSection() {
if (ranges.length === 0) return;
const scrollPosition = window.scrollY;
let newActive = 0;
// Find current range
if (scrollPosition < ranges[0].start) {
newActive = 0;
} else {
for (let i = 0; i < ranges.length; i++) {
if (scrollPosition >= ranges[i].start && scrollPosition < ranges[i].end) {
newActive = i;
break;
}
}
}
// Special case: if near bottom of page, activate last item
const scrollBottom = scrollPosition + window.innerHeight;
const documentHeight = document.documentElement.scrollHeight;
if (documentHeight - scrollBottom < 100) {
newActive = tocItems.length - 1;
}
// Update classes if changed
if (newActive !== currentActive) {
tocItems.forEach(item => removeClass(item.element, 'active'));
currentActive = newActive;
if (tocItems[currentActive]) {
addClass(tocItems[currentActive].element, 'active');
}
}
frameRequested = false;
}
// Scroll handler
function handleScroll() {
if (!frameRequested) {
frameRequested = true;
window.requestAnimationFrame(updateActiveSection);
}
}
// Recalculate on resize (debounced)
const handleResize = debounce(() => {
calculateRanges();
updateActiveSection();
}, 250);
// Smooth scroll behavior for ToC links
tocItems.forEach(item => {
item.element.querySelector('a').addEventListener('click', function(e) {
e.preventDefault();
const targetId = this.getAttribute('href').substring(1);
const targetElement = document.getElementById(targetId);
if (targetElement) {
const scrollTo = targetElement.parentElement.offsetTop - headerHeight - 20;
window.scrollTo({
top: scrollTo,
behavior: 'smooth'
});
}
});
});
// Initialize
calculateRanges();
addClass(tocItems[0].element, 'active');
// Handle hash on initial page load
if (window.location.hash) {
const hash = window.location.hash.substring(1);
const targetIndex = tocItems.findIndex(item =>
item.target.querySelector('.anchor')?.id === hash
);
if (targetIndex !== -1) {
tocItems.forEach(item => removeClass(item.element, 'active'));
addClass(tocItems[targetIndex].element, 'active');
currentActive = targetIndex;
}
}
// Re-check after browser might restore scroll position
requestAnimationFrame(() => {
requestAnimationFrame(() => {
calculateRanges();
updateActiveSection();
});
});
// Event listeners
window.addEventListener('scroll', handleScroll, { passive: true });
window.addEventListener('resize', handleResize);
// Visual Viewport API for mobile viewport changes (keyboard, browser chrome)
if (window.visualViewport) {
window.visualViewport.addEventListener('resize', handleResize);
window.visualViewport.addEventListener('scroll', handleResize);
}
// Browser back/forward navigation with hash changes
window.addEventListener('popstate', () => {
calculateRanges();
updateActiveSection();
});
// Handle dynamic content changes (if Webflow adds/removes content)
const observer = new MutationObserver(debounce(() => {
calculateRanges();
updateActiveSection();
}, 500));
observer.observe(tutorialContent, {
childList: true,
subtree: true,
attributes: false
});
// Recalculate after images load (affects layout positions)
const images = tutorialContent.querySelectorAll('img');
images.forEach(img => {
if (!img.complete) {
img.addEventListener('load', handleResize, { once: true });
img.addEventListener('error', handleResize, { once: true });
}
});
// Recalculate after fonts load
if (document.fonts && document.fonts.ready) {
document.fonts.ready.then(handleResize);
}
});
How to use Claude in Excel for accounting: Revenue model validationUse Claude to validate ASC 606 revenue models, surface reconciliation issues, and build financial visualizationsCategoryFinanceProductClaude.aiReading timeWatch time3min8minShareCopy linkhttps://claude.com/resources/tutorials/how-to-use-claude-in-excel-for-accounting-revenue-model-validationClaude in Excel works directly inside your spreadsheet through a sidebar, reading your data and making changes through conversation. In this tutorial, you'll see how an accountant uses Claude to validate an ASC 606 revenue recognition model—the kind of multi-tab workbook you might inherit during an audit or acquire in a transaction.What you'll learnUnderstand workbooks you didn't build — Ask Claude to explain how tabs connect. It reads every sheet first, then maps the structure—how schedules tie together, where data flows, what feeds into what.Surface errors and inconsistencies — Claude catches reconciliation gaps, duplicate entries, and missing data across multiple sheets. Instead of clicking through tabs yourself, you see everything it found upfront—and choose what to tackle first.Fix issues with confirmation — When Claude finds a problem, it shows you what's wrong, explains the recommended fix, and waits for your go-ahead. You stay in control of what changes.Add columns and formatting through conversation — Describe what you need—status indicators, legends, new calculations—and Claude builds it. It learns patterns from your existing data and applies them consistently.Create charts by describing them — Tell Claude what visualization you need. It creates helper tables when necessary, builds the chart, and will rebuild if the first version isn't right.In this videoFollow along with the video, or copy these prompts to try in your own workbook.0:00 — Get oriented in an unfamiliar modelAsk Claude to explain a workbook you've inherited or need to audit. Claude reads every tab before responding, giving it full context for follow-up questions."Walk me through this model. What's on each tab and how does everything tie together?"1:13 — Let Claude surface issues for youAfter reading the workbook, Claude proactively identifies problems: reconciliation gaps, duplicate entries, missing data. You choose which to tackle first."Yes, please look at the reconciliation issue first."2:17 — Fix data with confirmationClaude shows you what it found and what it recommends. It won't make changes until you say so."Yes, go ahead."3:09 — Add columns through conversationDescribe what you want—status indicators, legends, new calculations—and Claude adds them."Add a check mark column showing testing status for each contract. Use ✓ for tested, IP for in progress, and NP for not yet started. Add a legend at the bottom."4:24 — Create charts by describing themTell Claude what visualization you need. It creates helper tables when necessary and will rebuild if the first version isn't right."Create a waterfall chart showing the Q3 deferred revenue rollforward—beginning balance, bookings, revenue recognized, adjustments, and ending balance."6:11 — Return to earlier issuesClaude remembers everything from your conversation. Circle back to issues it flagged earlier without re-explaining."Let's go back to the issues you identified—a missing journal entry and one other I think?"What to noticeClaude reads before it answers. When you ask about the model, Claude doesn't guess—it reads all six sheets first, then explains how they connect. This prevents errors from incomplete context and gives Claude the baseline it needs for follow-up questions.Issues surface together. Instead of discovering problems one at a time as you click through tabs, Claude presents everything it found upfront: the reconciliation gap, the duplicate, the missing entry, the flagged items. You decide what to tackle first.Changes require confirmation. Claude shows the math, explains what will change, and waits for your "yes, go ahead" before modifying anything. You see exactly what's happening and can verify the logic.Context carries through the conversation. When you say "let's go back to the issues you identified," Claude remembers what it flagged earlier. You don't need to re-explain or re-read the model.Claude learns patterns from your data. When adding September journal entries, Claude analyzed the existing July and August entries, identified that revenue splits 80% Platform / 12% Support / 8% Services, and applied that same logic. The new entries follow your established pattern.Next stepsThis tutorial shows one use case: validating an ASC 606 revenue model with reconciliation issues and missing entries. The same approach works for any multi-sheet model where you need to understand the structure, catch problems, or extend what's already built—budgets, forecasts, audit workpapers.Get started:Install Claude in Excel from Microsoft AppSourceOpen it with Ctrl+Option+C (Mac) or Ctrl+Alt+C (Windows)Start with "Walk me through this model" on any spreadsheet you've inheritedLearn more:Claude in Excel help articleWhat is the Max plan?What you'll learnIn this videoWhat to noticeNext stepsRelated tutorialsGetting started with Claude in ExcelGetting started with Claude in ExcelGetting started with Claude in ExcelTutorialTutorialTutorialHow to use Claude in Excel for HR: Headcount planningHow to use Claude in Excel for HR: Headcount planningHow to use Claude in Excel for HR: Headcount planningTutorialTutorialTutorialPrompting strategies for financial analysisPrompting strategies for financial analysisPrompting strategies for financial analysisTutorialTutorialTutorialClaude for financial services overviewClaude for financial services overviewClaude for financial services overviewTutorialTutorialTutorial
@container (width < 52em) {
.footer_layout {
display: flex;
column-gap: var(--_spacing---space--4rem);
row-gap: var(--_spacing---space--4rem);
}
.footer_content_wrap.u-column-custom {
display: contents;
}
}
.footer_link {
opacity: 1;
transition: opacity 0.3s ease;
}
.footer_links_list:has(.footer_link:hover) .footer_link:not(:hover) {
opacity: 0.4;
}
HomepageHomepageNextNextThank you! Your submission has been received!Oops! Something went wrong while submitting the form.
(function () {
const ROOT_SEL = "[data-prompt-scope]";
const TRIGGER_SEL = "[data-prompt-trigger]";
const MENU_ATTR = "data-prompt-menu";
const CLOSE_SEL = "[data-prompt-menu-close]";
const ACTION_SEL = "a, button, [data-prompt-menu-action]";
const ITEM_SEL = "[data-prompt-item], li, .menu-item, .w-dyn-item";
// ---------- Claude helper ----------
function buildClaudeUrl(text) {
const url = new URL("https://claude.ai/new");
url.searchParams.set("q", text || "");
return url.toString();
}
function openClaude(text) {
const q = (text || "").trim();
if (!q) return;
window.open(buildClaudeUrl(q), "_blank", "noopener");
}
// ---------- Utilities ----------
let uid = 0;
function makeId(prefix = "prompt-menu") {
uid += 1;
return `${prefix}-${Date.now().toString(36)}-${uid}`;
}
// Limit queries to elements that belong to THIS scope (ignore nested scopes)
function qsaInScope(root, sel) {
return Array.from(root.querySelectorAll(sel)).filter(
(el) => el.closest(ROOT_SEL) === root
);
}
// Lightweight shield to stop click-through during the brief close animation
function deployClickShield(ms = 300) {
const sh = document.createElement("div");
sh.style.cssText =
"position:fixed;inset:0;z-index:2147483647;pointer-events:auto;background:transparent";
document.body.appendChild(sh);
setTimeout(() => {
sh.remove();
}, ms);
}
// Pairing: find which menu a trigger controls (no manual ids needed)
function resolveMenuForTrigger(root, trigger) {
// 1) explicit data-prompt-trigger="x" -> [data-prompt-menu="x"]
const explicit = trigger.getAttribute("data-prompt-trigger");
if (explicit) {
const m = qsaInScope(root, `[${MENU_ATTR}="${explicit}"]`)[0];
if (m) return m;
}
// 2) aria-controls
const ctrl = trigger.getAttribute("aria-controls");
if (ctrl) {
const m = qsaInScope(root, `#${ctrl.replace(/(["'\\])/g, "\\$1")}`)[0];
if (m) return m;
}
// 3) nearest following sibling with [data-prompt-menu]
let sib = trigger.nextElementSibling;
while (sib && sib !== root) {
if (
sib.hasAttribute &&
sib.hasAttribute(MENU_ATTR) &&
sib.closest(ROOT_SEL) === root
)
return sib;
sib = sib.nextElementSibling;
}
// 4) first menu in this root
return qsaInScope(root, `[${MENU_ATTR}]`)[0] || null;
}
function ensurePairing(trigger, menu) {
if (!menu.id) menu.id = makeId();
trigger.setAttribute("aria-controls", menu.id);
if (trigger.tagName === "BUTTON" && !trigger.hasAttribute("type"))
trigger.type = "button";
}
// ---------- Animations (GSAP) ----------
function revealMenu(menu) {
return new Promise((resolve) => {
gsap.set(menu, {
visibility: "visible",
pointerEvents: "auto",
willChange: "transform, opacity",
});
gsap.killTweensOf(menu);
gsap.fromTo(
menu,
{ opacity: 0, scale: 0.96 },
{
opacity: 1,
scale: 1,
duration: 0.28,
ease: "power3.out",
clearProps: "willChange",
onComplete: resolve,
}
);
});
}
function hideMenu(menu) {
return new Promise((resolve) => {
gsap.killTweensOf(menu);
gsap.to(menu, {
opacity: 0,
duration: 0.2,
ease: "power2.out",
onComplete: () => {
gsap.set(menu, {
visibility: "hidden",
pointerEvents: "none",
clearProps: "opacity,scale,willChange",
});
resolve();
},
});
});
}
// ---------- Per-scope controller ----------
const stateMap = new WeakMap(); // root -> { openMenuEl, openTrigger, isAnimating }
function getState(root) {
let s = stateMap.get(root);
if (!s) {
s = { openMenuEl: null, openTrigger: null, isAnimating: false };
stateMap.set(root, s);
}
return s;
}
function setTriggersInteractive(root, enabled) {
qsaInScope(root, TRIGGER_SEL).forEach((el) => {
el.style.pointerEvents = enabled ? "auto" : "none";
});
}
// ---------- Button fade animations ----------
function fadeOutButtons(root) {
return new Promise((resolve) => {
const buttons = qsaInScope(root, TRIGGER_SEL);
if (buttons.length === 0) {
resolve();
return;
}
gsap.killTweensOf(buttons);
gsap.to(buttons, {
autoAlpha: 0,
duration: 0.2,
ease: "power2.out",
onComplete: resolve,
});
});
}
function fadeInButtons(root) {
return new Promise((resolve) => {
const buttons = qsaInScope(root, TRIGGER_SEL);
if (buttons.length === 0) {
resolve();
return;
}
gsap.killTweensOf(buttons);
gsap.to(buttons, {
autoAlpha: 1,
duration: 0.2,
ease: "power2.out",
onComplete: resolve,
});
});
}
async function openMenuIn(root, menu, trigger) {
const s = getState(root);
if (s.isAnimating || s.openMenuEl === menu) return;
s.isAnimating = true;
// close any currently open in THIS scope only
if (s.openMenuEl && s.openMenuEl !== menu) {
await hideMenu(s.openMenuEl);
if (s.openTrigger) s.openTrigger.setAttribute("aria-expanded", "false");
}
// Fade out buttons when opening menu
await fadeOutButtons(root);
await revealMenu(menu);
s.openMenuEl = menu;
s.openTrigger = trigger || null;
if (s.openTrigger) s.openTrigger.setAttribute("aria-expanded", "true");
// Disable only this scope's triggers while open
setTriggersInteractive(root, false);
s.isAnimating = false;
}
async function closeMenuIn(root) {
const s = getState(root);
if (!s.openMenuEl || s.isAnimating) return;
s.isAnimating = true;
deployClickShield(280); // prevent click-through during closing
await hideMenu(s.openMenuEl);
if (s.openTrigger) s.openTrigger.setAttribute("aria-expanded", "false");
s.openMenuEl = null;
s.openTrigger = null;
// Re-enable only this scope's triggers
setTriggersInteractive(root, true);
// Fade in buttons when closing menu
await fadeInButtons(root);
s.isAnimating = false;
}
// ---------- Initializer ----------
const initedRoots = new WeakSet();
function initScope(root) {
if (!root || initedRoots.has(root)) return;
initedRoots.add(root);
if (!window.gsap) {
console.warn("GSAP is required for prompt menus.");
return;
}
// Normalize ALL menus in this scope to hidden on init (prevents “open on load” bugs)
qsaInScope(root, `[${MENU_ATTR}]`).forEach((menu) => {
if (menu.dataset.pmMenuInit) return;
menu.dataset.pmMenuInit = "true";
gsap.set(menu, {
visibility: "hidden",
opacity: 0,
scale: 1,
pointerEvents: "none",
});
// Optional close button
const closer = menu.querySelector(CLOSE_SEL);
if (closer) {
if (closer.tagName === "BUTTON" && !closer.hasAttribute("type"))
closer.type = "button";
closer.addEventListener("click", (e) => {
e.preventDefault();
e.stopPropagation();
closeMenuIn(root);
});
}
// Menu item -> Claude
menu.addEventListener("click", (e) => {
const target = e.target.closest(ACTION_SEL);
if (!target || !menu.contains(target)) return;
const container = target.closest(ITEM_SEL) || target;
const hiddenP = container.querySelector("[data-prompt-menu-text]");
if (!hiddenP) return;
e.preventDefault();
e.stopPropagation();
const text = hiddenP.textContent || hiddenP.innerText || "";
openClaude(text);
// close after action
closeMenuIn(root);
});
});
// Bind triggers (auto-wire)
qsaInScope(root, TRIGGER_SEL).forEach((trigger) => {
if (trigger.dataset.pmTrigInit) return;
trigger.dataset.pmTrigInit = "true";
const menu = resolveMenuForTrigger(root, trigger);
if (menu) ensurePairing(trigger, menu);
trigger.setAttribute("aria-expanded", "false");
trigger.addEventListener("click", async (e) => {
e.preventDefault();
const targetMenu = resolveMenuForTrigger(root, trigger);
if (!targetMenu) return;
const s = getState(root);
if (s.openMenuEl === targetMenu) {
await closeMenuIn(root); // toggle close
return;
}
await openMenuIn(root, targetMenu, trigger);
});
});
// Outside click (this scope only)
document.addEventListener("click", (e) => {
const s = getState(root);
if (!s.openMenuEl) return;
const insideMenu = s.openMenuEl.contains(e.target);
const onTrigger =
!!e.target.closest(TRIGGER_SEL) && root.contains(e.target);
if (!insideMenu && !onTrigger) closeMenuIn(root);
});
// ESC (this scope only)
document.addEventListener("keydown", (e) => {
if (e.key === "Escape") closeMenuIn(root);
});
}
// ---------- Boot + observe ----------
function boot(container = document) {
const roots = container.querySelectorAll
? container.querySelectorAll(ROOT_SEL)
: [];
roots.forEach(initScope);
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", () => boot(), {
once: true,
});
} else {
boot();
}
const mo = new MutationObserver((muts) => {
for (const m of muts) {
for (const node of m.addedNodes || []) {
if (node.nodeType !== 1) continue;
if (node.matches && node.matches(ROOT_SEL)) initScope(node);
if (node.querySelectorAll) {
node.querySelectorAll(ROOT_SEL).forEach(initScope);
}
}
}
});
mo.observe(document.documentElement, { childList: true, subtree: true });
})();
(function () {
// ---------- Claude helper ----------
function buildClaudeUrl(text) {
const url = new URL('https://claude.ai/new');
url.searchParams.set('q', text || '');
return url.toString();
}
// ---------- Auto-grow helpers ----------
function sizeTextarea(el) {
// Ensure UA defaults don't force a starting height
el.setAttribute('rows', el.getAttribute('data-min-rows') || '1');
el.style.minHeight = '0px';
el.style.height = 'auto'; // allow shrink
el.style.height = el.scrollHeight + 'px'; // fit content
}
function initAutogrow(root = document) {
root.querySelectorAll('textarea[data-autogrow]').forEach((el) => {
if (el.dataset.autogrowInit) return;
el.dataset.autogrowInit = 'true';
// Respect your existing pattern for default text
const preset = el.getAttribute('data-default-text');
if (preset != null && !el.value) el.value = preset;
// Initial sizing
sizeTextarea(el);
// Resize as you type
el.addEventListener('input', () => sizeTextarea(el));
// In case fonts/styles load late and change line-height
window.addEventListener('load', () => sizeTextarea(el), { once: true });
});
}
// ---------- Claude form initializer ----------
function initClaudeForms(root = document) {
root.querySelectorAll('form[data-claude-form]').forEach((form) => {
if (form.dataset.claudeInit) return;
form.dataset.claudeInit = 'true';
const textarea = form.querySelector('[data-claude-textarea], textarea');
const trigger = form.querySelector('[data-claude-button], button[type="button"], a[data-claude-button]');
if (!textarea || !trigger) {
console.warn('Claude form: missing textarea or trigger in', form);
return;
}
// If the trigger is a <button> but has no type, force "button" so it won't submit
if (trigger.tagName === 'BUTTON' && !trigger.hasAttribute('type')) {
trigger.type = 'button';
}
// Keep <a> from navigating away while still opening Claude
if (trigger.tagName === 'A') {
trigger.addEventListener('click', (e) => e.preventDefault());
}
// Optional: support data-default-text on the textarea
const preset = textarea.getAttribute('data-default-text');
if (preset != null && !textarea.value) textarea.value = preset;
// Click opens Claude; submission is optional
trigger.addEventListener('click', () => {
const text = (textarea.value || '').trim();
if (!text) {
textarea.focus();
return;
}
window.open(buildClaudeUrl(text), '_blank', 'noopener');
const mode = form.getAttribute('data-claude-mode') || 'intercept';
if (mode === 'also') {
// Submit after opening Claude
form.submit();
}
// intercept mode: do nothing (no submit)
});
// (Optional) Keep an <a data-claude-button> href in sync for right-click/open-in-new-tab UX
if (trigger.tagName === 'A') {
const syncHref = () => trigger.setAttribute('href', buildClaudeUrl((textarea.value || '').trim()));
syncHref();
textarea.addEventListener('input', syncHref);
textarea.addEventListener('change', syncHref);
}
});
}
// ---------- Boot ----------
function initAll(root = document) {
initAutogrow(root);
initClaudeForms(root);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => initAll(), { once: true });
} else {
initAll();
}
// Re-init if content is injected later (Webflow CMS / IX / tabs)
const mo = new MutationObserver((muts) => {
for (const m of muts) {
for (const node of m.addedNodes || []) {
if (node.nodeType === 1) initAll(node);
}
}
});
mo.observe(document.documentElement, { childList: true, subtree: true });
})();
.prompt_menu_item {
transition: border-color 0.2s ease, color 0.2s ease;
}
.prompt_menu_item_base, .prompt_menu_item_icon {
transition: opacity 0.2s ease;
}
.prompt_menu_list .prompt_menu_item:first-child {
border-color: transparent;
}
.prompt_menu_item:hover {
border-color: transparent;
color: var(--_theme---foreground-primary);
}
.prompt_menu_item:hover .prompt_menu_item_base {
opacity: 1;
}
.prompt_menu_item:hover .prompt_menu_item_icon {
opacity: 1;
}
.prompt_menu_item:hover + .prompt_menu_item {
border-top-color: transparent;
}
.button_prompt_icon {
transition: color 0.3s ease;
}
.button_prompt_wrap:hover .button_prompt_icon {
color: var(--_button-style---icon-hover);
}
.button_prompt_wrap:focus-within .button_prompt_icon {
color: var(--_button-style---text-hover) !important;
}
.button_prompt_wrap:focus-within {
color: var(--_button-style---text-hover) !important;
}
WriteButton TextButton TextLearnButton TextButton TextCodeButton TextButton TextWriteHelp me develop a unique voice for an audienceHi Claude! Could you help me develop a unique voice for an audience? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Improve my writing styleHi Claude! Could you improve my writing style? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Brainstorm creative ideasHi Claude! Could you brainstorm creative ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!LearnExplain a complex topic simplyHi Claude! Could you explain a complex topic simply? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Help me make sense of these ideasHi Claude! Could you help me make sense of these ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Prepare for an exam or interviewHi Claude! Could you prepare for an exam or interview? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!CodeExplain a programming conceptHi Claude! Could you explain a programming concept? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Look over my code and give me tipsHi Claude! Could you look over my code and give me tips? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Vibe code with meHi Claude! Could you vibe code with me? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!MoreWrite case studiesThis is another testWrite grant proposalsHi Claude! Could you write grant proposals? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to — like Google Drive, web search, etc. — if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can - an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Write video scriptsthis is a testAnthropicAnthropic© 2026 Anthropic PBCProductsClaudeClaudeClaudeClaude CodeClaude CodeClaude CodeCoworkCoworkCoworkMax planMax planMax planTeam planTeam planTeam planEnterprise planEnterprise planEnterprise planDownload appDownload appDownload appPricingPricingPricingLog inLog inLog inFeaturesClaude in ChromeClaude in ChromeClaude in ChromeClaude in SlackClaude in SlackClaude in SlackClaude in ExcelClaude in ExcelClaude in ExcelSkillsSkillsSkillsModelsOpusOpusOpusSonnetSonnetSonnetHaikuHaikuHaikuSolutionsAI agentsAI agentsAI agentsCode modernizationCode modernizationCode modernizationCodingCodingCodingCustomer supportCustomer supportCustomer supportEducationEducationEducationFinancial servicesFinancial servicesFinancial servicesGovernmentGovernmentGovernmentHealthcareHealthcareHealthcareLife sciencesLife sciencesLife sciencesNonprofitsNonprofitsNonprofitsClaude Developer PlatformOverviewOverviewOverviewDeveloper docsDeveloper docsDeveloper docsPricingPricingPricingRegional ComplianceRegional ComplianceRegional ComplianceAmazon BedrockAmazon BedrockAmazon BedrockGoogle Cloud’s Vertex AIGoogle Cloud’s Vertex AIGoogle Cloud’s Vertex AIConsole loginConsole loginConsole loginLearnBlogBlogBlogClaude partner networkClaude partner networkClaude partner networkCoursesCoursesCoursesConnectorsConnectorsConnectorsCustomer storiesCustomer storiesCustomer storiesEngineering at AnthropicEngineering at AnthropicEngineering at AnthropicEventsEventsEventsPluginsPluginsPluginsPowered by ClaudePowered by ClaudePowered by ClaudeService partnersService partnersService partnersStartups programStartups programStartups programTutorialsTutorialsTutorialsUse casesUse casesUse casesCompanyAnthropicAnthropicAnthropicCareersCareersCareersEconomic FuturesEconomic FuturesEconomic FuturesResearchResearchResearchNewsNewsNewsResponsible Scaling PolicyResponsible Scaling PolicyResponsible Scaling PolicySecurity and complianceSecurity and complianceSecurity and complianceTransparencyTransparencyTransparencyHelp and securityAvailabilityAvailabilityAvailabilityStatusStatusStatusSupport centerSupport centerSupport centerTerms and policiesPrivacy choices
/* Dialog styling */
dialog#consent-container {
margin: 0;
padding: 8px;
opacity: 0;
transform: translateY(16px);
transition: opacity 0.3s ease-out, transform 0.3s ease-out;
}
dialog#consent-container.show {
opacity: 1;
transform: translateY(0);
}
dialog#consent-container::backdrop {
background: transparent;
}
dialog button span {
display: inline !important;
}
/* Toggle switch styling */
.toggle_switch {
position: relative;
display: inline-block;
width: 36px;
height: 24px;
}
.toggle_switch input {
opacity: 0;
width: 0;
height: 0;
}
.toggle_slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #87867f;
transition: .4s;
border-radius: 24px;
}
.toggle_slider:before {
position: absolute;
content: "";
height: 18px;
width: 18px;
left: 3px;
bottom: 3px;
background-color: white;
transition: .4s;
border-radius: 50%;
}
input:checked + .toggle_slider {
background-color: #d97757;
}
input:checked + .toggle_slider:before {
transform: translateX(12px);
}
input:disabled + .toggle_slider {
cursor: not-allowed;
opacity: 0.5;
}
@media only screen and (max-width: 501px) {
dialog#consent-container {
left: 8px !important;
bottom: 8px !important;
right: 8px !important;
}
#consent-banner {
padding: 24px 16px 16px !important;
}
#simple-options {
grid-template-columns: repeat(3, 1fr) !important;
grid-template-rows: auto auto !important;
}
#customize-btn {
grid-column: span 1 !important;
}
dialog button span {
display: none !important;
}
Cookie settings
We use cookies to deliver and improve our services, analyze site usage, and if you agree, to customize or personalize your experience and market our services to you. You can read our Cookie Policy here.
Customize cookie settings
Reject all cookies
Accept all cookies
Necessary
Enables security and basic functionality.
Required
Analytics
Enables tracking of site performance.
Off
Marketing
Enables ads personalization and tracking.
Off
Save preferences
Privacy policyPrivacy policyPrivacy policyResponsible disclosure policyResponsible disclosure policyResponsible disclosure policyTerms of service: CommercialTerms of service: CommercialTerms of service: CommercialTerms of service: ConsumerTerms of service: ConsumerTerms of service: ConsumerUsage policyUsage policyUsage policyx.comx.comLinkedInLinkedInYouTubeYouTubeInstagramInstagramEnglish (US)
function initDynamicCurrentYear() {
const currentYear = new Date().getFullYear();
const currentYearElements = document.querySelectorAll('[data-current-year]');
currentYearElements.forEach(currentYearElement => {
currentYearElement.textContent = currentYear;
});
}
// Initialize Dynamic Current Year
document.addEventListener('DOMContentLoaded', () => {
initDynamicCurrentYear();
});
gsap.registerPlugin(ScrollTrigger,SplitText,TextPlugin,Flip,Draggable,InertiaPlugin);
document.addEventListener('DOMContentLoaded', function() {
const contentElement = document.querySelector('[data-readtime="content"]');
const minutesElement = document.querySelector('[data-readtime="minutes"]');
if (!contentElement || !minutesElement) return;
const text = contentElement.innerText || contentElement.textContent;
const wordCount = text.trim().split(/\s+/).length;
const wordsPerMinute = 250;
const minutes = Math.round(wordCount / wordsPerMinute);
minutesElement.textContent = minutes || 1; // minimum 1 minute
});
// Hide all empty paragraph tags from the main content RTF
document.querySelectorAll('#tutorial_content p').forEach(p => {
if (p.textContent.trim() === '' || /^[\u200B-\u200D\uFEFF]+$/.test(p.textContent)) {
p.remove();
}
});
×
---
## resources-tutorials-how-to-use-claude-in-excel-for-hr-headcount-planning.md
<!-- Source: https://claude.com/resources/tutorials/how-to-use-claude-in-excel-for-hr-headcount-planning -->
:root {
--grid-breakout: [full-start] minmax(0, 1fr) [content-start] repeat(var(--_grid---column-count), minmax(0, var(--_grid---column-width))) [content-end] minmax(0, 1fr) [full-end];
--grid-breakout-single: [full-start] minmax(0, 1fr) [content-start] minmax(0, calc(100% - var(--site--margin) * 2)) [content-end] minmax(0, 1fr) [full-end];
}
::before, ::after {
box-sizing: border-box;
}
.w-embed:before, .w-embed:after,
.w-richtext:before, .w-richtext:after {
content: unset;
}
html {
background-color: var(--_theme---background);
}
button {
background-color: unset;
padding: unset;
text-align: inherit;
}
button:not(:disabled) {
cursor: pointer;
}
video {
width: 100%;
object-fit: cover;
}
/* remove padding of empty element */
.wf-empty {
padding: 0;
}
svg {
max-width: 100%;
}
@media (prefers-color-scheme: light) {
option { color: black; }
}
img::selection {
background: transparent;
}
/* Typography */
body {
text-transform: var(--_text-style---text-transform);
font-smoothing: antialiased;
-webkit-font-smoothing: antialiased;
}
/* Clear Defaults */
a:not ([class]) {
text-decoration: underline;}
[class~="u-rich-text"] a,
[class~="u-rich-text-cs"] a,
[class~="u-rich-text-blog"] a,
[class~="u-rich-text-tutorials"] a,
a.u-rich-text,
[class~="command_instruction"] a {
transition: color .15s ease-out, text-decoration-color .15s ease-out;
text-underline-offset: 3px;
text-decoration: underline;
color: currentcolor;
text-decoration-color: var(--_theme---border-primary);
}
[class~="u-rich-text"] a:hover,
[class~="u-rich-text-cs"] a:hover,
[class~="u-rich-text-blog"] a:hover,
[class~="u-rich-text-tutorials"] a:hover,
a.u-rich-text:hover,
[class~="command_instruction"] a:hover {
text-decoration-color: var(--_theme---foreground-primary);
color: var(--_theme---foreground-primary);
}
h1,h2,h3,h4,h5,h6,p,blockquote,label {
font-family: inherit;
font-size: inherit;
font-weight: inherit;
line-height: inherit;
letter-spacing: inherit;
text-transform: inherit;
text-wrap: inherit;
margin-top: 0;
margin-bottom: 0;
}
select:has(option[value=""]:checked) {
color: color-mix(in lab, currentcolor 60%, transparent)
}
/* Selection Color */
::selection {
background-color: var(--_theme---selection--background);
color: var(--_theme---selection--text);
}
/* Margin Trim */
:is(.u-margin-trim,.u-rich-text) > :not(:not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim) ~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim)),
:is(.u-margin-trim,.u-rich-text) > :not(:not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim) ~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim)).u-display-contents > :first-child {
margin-top: 0;
}
:is(.u-margin-trim,.u-rich-text) > :not(:has(~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim))),
:is(.u-margin-trim,.u-rich-text) > :not(:has(~ :not(.w-condition-invisible,.u-cover-absolute,.u-ignore-trim))).u-display-contents > :last-child {
margin-bottom: 0;
}
/* Line Height Trim */
:is(h1,h2,h3,h4,h5,h6,p):not(.u-text-trim-off,:has([class*="u-text-style-"]))::before,
[class*="u-text-style-"]:not(.u-text-trim-off,:has(h1,h2,h3,h4,h5,h6,p))::before {
content: "";
display: table;
margin-bottom: calc(-0.5lh + var(--_text-style---trim-top));
}
:is(h1,h2,h3,h4,h5,h6,p):not(.u-text-trim-off,:has([class*="u-text-style-"]))::after,
[class*="u-text-style-"]:not(.u-text-trim-off,:has(h1,h2,h3,h4,h5,h6,p))::after {
content: "";
display: table;
margin-bottom: calc(-0.5lh + var(--_text-style---trim-bottom));
}
/* Rich Text Links */
.w-richtext a {
position: relative;
z-index: 4;
}
/* Line Clamp */
.u-line-clamp-1, .u-line-clamp-2, .u-line-clamp-3, .u-line-clamp-4 {
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.u-line-clamp-2 { -webkit-line-clamp: 2; }
.u-line-clamp-3 { -webkit-line-clamp: 3; }
.u-line-clamp-4 { -webkit-line-clamp: 4; }
/* Child Contain */
.u-child-contain > * {
width: 100%;
max-width: inherit !important;
margin-inline: 0 !important;
margin-top: 0 !important;
}
/* Hide */
.u-hide-if-empty:empty,
.u-hide-if-empty:not(:has(> :not(.w-condition-invisible))),
.u-hide-if-empty-cms:not(:has(.w-dyn-item)),
.u-embed-js,
.u-embed-css {
display: none !important;
}
/* Focus State */
a, button, :where([tabindex]), [data-outline] {
outline-offset: var(--focus--offset-outer);
}
a:focus-visible,
button:focus-visible,
[tabindex]:focus-visible,
label:has(input:focus-visible) [data-outline] {
outline-color: color-mix(in srgb, var(--_button-style---border) 50%, transparent);
outline-width: var(--focus--width);
outline-style: solid;
}
/* Global / Clickable Component */
.wf-design-mode .clickable_wrap {
z-index: 0;
}
.clickable_wrap a[href="#"] {
display: none;
}
.clickable_wrap a[href="#"] ~ button {
display: block;
}
/* Responsive Above */
@container threshold-large (width >= 62em) {
.u-order-unset-above { order: unset !important; }
.u-all-unset-above { all: unset !important; }
.u-grid-below { display: flex !important; }
.u-max-width-unset-above { max-width: unset !important; }
.u-width-unset-above { width: unset !important; }
.u-hide-above { display: none !important; }
}
@container threshold-medium (width >= 48em) {
.u-order-unset-above { order: unset !important; }
.u-all-unset-above { all: unset !important; }
.u-grid-below { display: flex !important; }
.u-max-width-unset-above { max-width: unset !important; }
.u-width-unset-above { width: unset !important; }
.u-hide-above { display: none !important; }
}
@container threshold-small (width >= 30em) {
.u-order-unset-above { order: unset !important; }
.u-all-unset-above { all: unset !important; }
.u-grid-below { display: flex !important; }
.u-max-width-unset-above { max-width: unset !important; }
.u-width-unset-above { width: unset !important; }
.u-hide-above { display: none !important; }
}
/* Responsive Below */
@container threshold-large (width < 62em) {
.u-order-unset-below { order: unset !important; }
.u-all-unset-below { all: unset !important; }
.u-grid-above { display: flex !important; }
.u-max-width-unset-below { max-width: unset !important; }
.u-width-unset-below { width: unset !important; }
.u-alignment-unset-below {
--_alignment---direction: start;
align-self: start;
}
.u-hide-below { display: none !important; }
}
@container threshold-medium (width < 48em) {
.u-order-unset-below { order: unset !important; }
.u-all-unset-below { all: unset !important; }
.u-grid-above { display: flex !important; }
.u-max-width-unset-below { max-width: unset !important; }
.u-width-unset-below { width: unset !important; }
.u-alignment-unset-below {
--_alignment---direction: start;
align-self: start;
}
.u-hide-below { display: none !important; }
}
@container threshold-small (width < 30em) {
.u-order-unset-below { order: unset !important; }
.u-all-unset-below { all: unset !important; }
.u-grid-above { display: flex !important; }
.u-max-width-unset-below { max-width: unset !important; }
.u-width-unset-below { width: unset !important; }
.u-alignment-unset-below {
--_alignment---direction: start;
align-self: start;
}
.u-hide-below { display: none !important; }
}
/* Form Radio */
.form_main_radio_label:has(input:checked) .form_main_radio_circle_inner {
opacity: 1;
}
/* Form Checkbox */
.form_main_checkbox_label:has(input:checked) .form_main_checkbox_box {
background-color: currentColor;
border-color: currentColor;
}
.form_main_checkbox_label:has(input:checked) .form_main_checkbox_icon {
opacity: 1;
}
/* State Manager */
[data-state] { --_state---true: 1; --_state---false: 0; }
.is-active,
[data-state~="checked"]:is(:checked, :has(:checked)),
[data-state~="current"]:is(.w--current, :has(.w--current)),
[data-state~="open"]:is(.w--open, :has(.w--open)),
[data-state~="expanded"]:is([aria-expanded="true"], :has([aria-expanded="true"])),
[data-state~="external"]:is([target="_blank"], :has([target="_blank"])) {
--_state---true: 0; --_state---false: 1;
}
.wf-design-mode [data-trigger~="preview"],
[data-trigger~="focus"]:is(:focus-visible, :has(:focus-visible)),
[data-trigger~="group"]:has([data-trigger~="focus-other"]:focus-visible, [data-trigger~="focus-other"] :focus-visible)
[data-trigger~="focus-other"]:not(:focus-visible, :has(:focus-visible)) {
--_trigger---on: 0; --_trigger---off: 1;
}
@media (hover: hover) {
[data-button]:hover,
[data-trigger~="hover"]:is(a:hover,button:hover,:has(a:hover,button:hover)),
[data-trigger~="group"]:has([data-trigger~="hover-other"]:hover) [data-trigger~="hover-other"]:not(:hover) {
--_trigger---on: 0; --_trigger---off: 1;
}
[data-trigger~="hover-other"]:hover { --_trigger---on: 1 !important; --_trigger---off: 0 !important; }
}
@media (hover: none) {
[data-trigger~="mobile"] { --_trigger---on: 0; --_trigger---off: 1; }
}
code, kbd, pre, samp {
font-family: var(--_typography---font--mono-family);
}
body * {
scrollbar-width: none; /* Firefox */
-ms-overflow-style: none; /* IE/Edge Legacy */
}
body *::-webkit-scrollbar {
display: none; /* Unreliable */
width: 0px; /* WebKit/Blink */
}
@media (prefers-color-scheme: dark) {
body,
.u-theme-ivory,
[data-wf--section--theme="ivory"] {
--_theme---background-primary: var(--swatch--gray-950);
--_theme---background-secondary: var(--swatch--gray-900);
--_theme---background-tertiary: var(--swatch--gray-850);
--_theme---border-primary: var(--swatch--gray-600);
--_theme---border-secondary: var(--swatch--gray-700);
--_theme---border-tertiary: var(--swatch--gray-750);
--_theme---foreground-primary: var(--swatch--gray-050);
--_theme---foreground-secondary: var(--swatch--gray-400);
--_theme---foreground-tertiary: var(--swatch--gray-500);
--_theme---pictogram-accent: var(--swatch--gray-750);
--_theme---button-primary--background: var(--swatch--gray-050);
--_theme---button-primary--text: var(--swatch--gray-950);
--_theme---button-primary--border: var(--swatch--transparent);
--_theme---button-primary--icon: var(--_theme---button-primary--text);
--_theme---button-primary--background-hover: var(--_theme---button-primary--background);
--_theme---button-primary--text-hover: var(--_theme---button-primary--text);
--_theme---button-primary--border-hover: var(--_theme---button-primary--border);
--_theme---button-primary--icon-hover: var(--_theme---background-primary);
--_theme---button-secondary--background: var(--swatch--gray-750);
--_theme---button-secondary--text: var(--swatch--gray-050);
--_theme---button-secondary--border: var(--_theme---border-secondary);
--_theme---button-secondary--icon: var(--_theme---button-secondary--text);
--_theme---button-secondary--background-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--text-hover: var(--_theme---button-secondary--text);
--_theme---button-secondary--border-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--icon-hover: var(--_theme---foreground-secondary);
--_theme---button-tertiary--background: var(--_theme---background-primary);
--_theme---button-tertiary--text: var(--swatch--gray-050);
--_theme---button-tertiary--border: var(--_theme---border-secondary);
--_theme---button-tertiary--icon: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--background-hover: var(--_theme---button-tertiary--background);
--_theme---button-tertiary--text-hover: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--border-hover: var(--_theme---button-tertiary--border);
--_theme---button-tertiary--icon-hover: var(--_theme---foreground-primary);
--_theme---error-text: #df6666;
--_theme---heroes-accent: #C46849;
--_theme---white: var(--_theme---background-primary);
}
.u-theme-white,
[data-wf--section--theme="white"] {
--_theme---background-primary: var(--swatch--gray-850);
--_theme---background-secondary: var(--swatch--gray-800);
--_theme---background-tertiary: var(--swatch--gray-750);
--_theme---border-primary: var(--swatch--gray-550);
--_theme---border-secondary: var(--swatch--gray-650);
--_theme---border-tertiary: var(--swatch--gray-700);
--_theme---foreground-primary: var(--swatch--gray-050);
--_theme---foreground-secondary: var(--swatch--gray-350);
--_theme---foreground-tertiary: var(--swatch--gray-450);
--_theme---pictogram-accent: var(--swatch--gray-700);
--_theme---button-primary--background: var(--swatch--gray-050);
--_theme---button-primary--text: var(--swatch--gray-950);
--_theme---button-primary--border: var(--swatch--transparent);
--_theme---button-primary--icon: var(--_theme---button-primary--text);
--_theme---button-primary--background-hover: var(--_theme---button-primary--background);
--_theme---button-primary--text-hover: var(--_theme---button-primary--text);
--_theme---button-primary--border-hover: var(--_theme---button-primary--border);
--_theme---button-primary--icon-hover: var(--_theme---background-primary);
--_theme---button-secondary--background: var(--swatch--gray-700);
--_theme---button-secondary--text: var(--swatch--gray-050);
--_theme---button-secondary--border: var(--_theme---border-secondary);
--_theme---button-secondary--icon: var(--_theme---button-secondary--text);
--_theme---button-secondary--background-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--text-hover: var(--_theme---button-secondary--text);
--_theme---button-secondary--border-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--icon-hover: var(--_theme---foreground-secondary);
--_theme---button-tertiary--background: var(--_theme---background-primary);
--_theme---button-tertiary--text: var(--swatch--gray-050);
--_theme---button-tertiary--border: var(--_theme---border-secondary);
--_theme---button-tertiary--icon: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--background-hover: var(--_theme---button-tertiary--background);
--_theme---button-tertiary--text-hover: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--border-hover: var(--_theme---button-tertiary--border);
--_theme---button-tertiary--icon-hover: var(--_theme---foreground-primary);
--_theme---error-text: #df6666;
--_theme---heroes-accent: #C46849;
--_theme---white: var(--_theme---background-primary);
}
.u-theme-neutral-1,
[data-wf--section--theme="neutral-1"] {
--_theme---background-primary: var(--swatch--gray-800);
--_theme---background-secondary: var(--swatch--gray-750);
--_theme---background-tertiary: var(--swatch--gray-700);
--_theme---border-primary: var(--swatch--gray-500);
--_theme---border-secondary: var(--swatch--gray-600);
--_theme---border-tertiary: var(--swatch--gray-650);
--_theme---foreground-primary: var(--swatch--gray-050);
--_theme---foreground-secondary: var(--swatch--gray-300);
--_theme---foreground-tertiary: var(--swatch--gray-400);
--_theme---pictogram-accent: var(--swatch--gray-650);
--_theme---button-primary--background: var(--swatch--gray-050);
--_theme---button-primary--text: var(--swatch--gray-950);
--_theme---button-primary--border: var(--swatch--transparent);
--_theme---button-primary--icon: var(--_theme---button-primary--text);
--_theme---button-primary--background-hover: var(--_theme---button-primary--background);
--_theme---button-primary--text-hover: var(--_theme---button-primary--text);
--_theme---button-primary--border-hover: var(--_theme---button-primary--border);
--_theme---button-primary--icon-hover: var(--_theme---background-primary);
--_theme---button-secondary--background: var(--swatch--gray-650);
--_theme---button-secondary--text: var(--swatch--gray-050);
--_theme---button-secondary--border: var(--_theme---border-secondary);
--_theme---button-secondary--icon: var(--_theme---button-secondary--text);
--_theme---button-secondary--background-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--text-hover: var(--_theme---button-secondary--text);
--_theme---button-secondary--border-hover: var(--_theme---button-secondary--background);
--_theme---button-secondary--icon-hover: var(--_theme---foreground-secondary);
--_theme---button-tertiary--background: var(--_theme---background-primary);
--_theme---button-tertiary--text: var(--swatch--gray-050);
--_theme---button-tertiary--border: var(--_theme---border-secondary);
--_theme---button-tertiary--icon: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--background-hover: var(--_theme---button-tertiary--background);
--_theme---button-tertiary--text-hover: var(--_theme---button-tertiary--text);
--_theme---button-tertiary--border-hover: var(--_theme---button-tertiary--border);
--_theme---button-tertiary--icon-hover: var(--_theme---foreground-primary);
--_theme---error-text: #df6666;
--_theme---heroes-accent: #C46849;
--_theme---white: var(--_theme---background-primary);
}
.logo_light {
display: none;
}
.logo_dark {
display: block;
}
.illustration_light {
display: none;
}
.illustration_dark {
display: block;
}
}
@media (prefers-color-scheme: light) {
.logo_light {
display: block;
}
.logo_dark {
display: none;
}
.illustration_light {
display: block;
}
.illustration_dark {
display: none;
}
}
.u-text-font-mono {
--_text-style---trim-top: var(--_typography---font--mono-text-trim-top);
--_text-style---trim-bottom: var(--_typography---font--mono-text-trim-bottom);
}
.u-checklist ul {
list-style: none;
margin: 0;
padding: 0;
}
.u-checklist ul li {
position: relative;
padding-left: 2rem;
}
.u-checklist ul li::before {
content: "";
position: absolute;
left: 0;
top: 0.1em;
width: 1.5rem;
height: 1.5rem;
background-repeat: no-repeat;
background-position: center;
background-size: contain;
background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M18.226%206.13068C18.4439%205.95655%2018.7615%205.95361%2018.9842%206.13888C19.2067%206.32458%2019.2604%206.63728%2019.1283%206.88304L19.0604%206.98382L10.0602%2017.784C9.95233%2017.9133%209.7949%2017.9908%209.62665%2017.9984C9.45844%2018.0059%209.29454%2017.9429%209.17547%2017.8238L4.97541%2013.6237L4.89806%2013.53C4.7446%2013.2971%204.7705%2012.9802%204.97541%2012.7753C5.18032%2012.5704%205.49726%2012.5445%205.73011%2012.698L5.82386%2012.7753L9.55868%2016.5101L18.1393%206.21506L18.226%206.13068Z%22%20fill%3D%22%235E5D59%22/%3E%3C/svg%3E");
}
[class^="card_"][class$="_wrap"] .clickable_wrap.u-cover-absolute .clickable_link,
[class^="card_"][class$="_wrap"] .clickable_wrap.u-cover-absolute .clickable_btn {
outline-offset: var(--focus--offset-inner);
}
textarea[data-autogrow] {
overflow-y: hidden;
resize: none;
height: 1.75rem;
min-height: 0;
}
.btn_main_wrap::hover,
.btn_small_wrap::hover,
.btn_tiny_wrap::hover,
.button_toggle_wrap::hover,
.btn_icon_main_wrap::hover,
.btn_icon_small_wrap::hover,
.btn_icon_tiny_wrap::hover{
transition: /* Transition to click/active */
box-shadow ease-in-out 100ms,
background ease-in-out 100ms,
color ease-in-out 50ms;
}
.btn_main_wrap::active,
.btn_small_wrap::active,
.btn_tiny_wrap::active,
.button_toggle_wrap::active,
.btn_icon_main_wrap::active,
.btn_icon_small_wrap::active,
.btn_icon_tiny_wrap::active{
transition: /* Transition to click/active */
box-shadow ease-in-out 50ms,
background ease-in-out 50ms,
color ease-in-out 25ms;
}
.card_cs_grid_img img {
max-width: 60%;
max-height: 60%;
}
@container viewport (width < 30em) {
[data-wf--grid--column-count="4"]:has(.card_feature_wrap) .c-grid {
--_column-count---value: 1;
}
}
@container viewport (min-width: 30em) and (max-width: 62em) {
[data-wf--grid--column-count="4"]:has(.card_feature_wrap) .c-grid {
--_column-count---value: 2;
}
}
/* Mods for spacing and visibility of embed in accordian content used for schema */
.accordion_content_text p:has(+ .w-embed.w-script) {
margin-bottom: 0;
}
/* Absolute inner SVG of lottie to prevent page jump */
.heroes_lottie_component svg {
position: absolute;
top: 0;
left: 0;
}
/* Sticky scroll */
@media screen and (min-width: 992px) {
.sticky_image_link_wrap:has(.sticky_image_link.w--current) {
opacity: 1;
width: calc((100% - var(--_grid---gutter)) * (6 / 12));
}
}
@media screen and (max-width: 767px) {
.c-grid:last-child .sticky_image_block,
.sticky_image_block:last-child {
padding: 0;
}
.c-grid:last-child .sticky_image_wrap {
margin-bottom: 0;
}
}
#send, #threads, #get-help, #collaborate {
display: block; /* or grid, flex - anything but contents */
}
/* Select text below clickable overlay */
html.wf-design-mode .clickable_wrap {
pointer-events: none;
}
document.addEventListener("DOMContentLoaded", function () {
// ---------------- Config ----------------
const EDGE_PADDING = 16; // >= 1rem from edges
const OFFSET_Y = 10; // gap under trigger
const DIM_OPACITY = 0.3;
const DIM_EASE_MS = 350;
const CLOSE_DELAY = 120;
const isCoarse = () => matchMedia("(hover: none), (pointer: coarse)").matches;
// ---------------- Bubble (single instance) ----------------
function ensureBubble(){
let el = document.querySelector(".tt-bubble");
if (el) return el;
el = document.createElement("div");
el.className = "tt-bubble u-theme-white";
el.setAttribute("role","tooltip");
el.setAttribute("aria-hidden","true");
el.style.left = "0px";
el.style.top = "0px";
el.innerHTML = `
<div class="tt-inner">
<div class="tt-h" id="tt-title"></div>
<p class="tt-b" id="tt-body"></p>
<button type="button" class="tt-close" aria-label="Close">×</button>
</div>`;
document.body.appendChild(el);
return el;
}
const bubble = ensureBubble();
const elH = bubble.querySelector("#tt-title");
const elB = bubble.querySelector("#tt-body");
const elClose = bubble.querySelector(".tt-close");
// ---------------- Parse [[term|heading|body]] anywhere ----------------
const TOKEN_RE = /\[\[([^|\]]+)\|([^|\]]+)\|([^\]]+)\]\]/g;
const BLOCK_SKIP = new Set(["SCRIPT","STYLE","NOSCRIPT","TEXTAREA","INPUT","SELECT","CODE","PRE","TEMPLATE","IFRAME"]);
function shouldSkipTextNode(n){
let el = n.parentElement;
while (el){
if (BLOCK_SKIP.has(el.tagName) || el.isContentEditable) return true;
el = el.parentElement;
}
return false;
}
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
const textNodes = [];
while (walker.nextNode()){
const n = walker.currentNode;
if (!n.nodeValue || shouldSkipTextNode(n)) continue;
if (TOKEN_RE.test(n.nodeValue)) textNodes.push(n);
TOKEN_RE.lastIndex = 0;
}
textNodes.forEach(node => {
const frag = document.createDocumentFragment();
const insideLink = !!node.parentElement.closest("a");
let text = node.nodeValue, last = 0; TOKEN_RE.lastIndex = 0; let m;
while ((m = TOKEN_RE.exec(text))){
if (m.index > last) frag.appendChild(document.createTextNode(text.slice(last, m.index)));
const term=m[1].trim(), heading=m[2].trim(), body=m[3].trim();
const t = insideLink ? document.createElement("span") : document.createElement("button");
if (insideLink){ t.setAttribute("role","button"); t.setAttribute("tabindex","0"); } else { t.type="button"; }
t.className="tt-trigger";
t.textContent=term;
t.setAttribute("data-tt-h", heading);
t.setAttribute("data-tt-b", body);
t.setAttribute("aria-haspopup","dialog");
t.setAttribute("aria-expanded","false");
frag.appendChild(t);
last = TOKEN_RE.lastIndex;
}
if (last < text.length) frag.appendChild(document.createTextNode(text.slice(last)));
node.parentNode.replaceChild(frag, node);
});
// ---------------- State ----------------
let current = null;
let hoverCount = 0;
let closeTimer = null;
// Dimming bookkeeping
let dimCtx = null; // { container, dimEls:[], wrappedTexts:[], pathEls:[] }
// ---------------- Find the correct "text element" container ----------------
function findTextContainer(trigger){
// Prefer common RTE wrappers
let el = trigger.closest(".w-richtext, .rich-text, .rte, [data-rte]");
if (el) return el;
// Otherwise climb until we find an ancestor that contains multiple block nodes anywhere inside.
const BLOCK_SEL = "p,h1,h2,h3,h4,h5,h6,ul,ol,li,blockquote,pre,figure,figcaption";
el = trigger.parentElement;
while (el && el !== document.body){
const blockCount = el.querySelectorAll(BLOCK_SEL).length;
if (blockCount >= 2) return el;
el = el.parentElement;
}
// Fallback: nearest non-inline container
el = trigger.parentElement || document.body;
while (el && el !== document.body){
const d = getComputedStyle(el).display;
if (d !== "inline" && d !== "contents") return el;
el = el.parentElement;
}
return document.body;
}
// Utility: child of `ancestor` that contains `target` (direct child)
function directChildContaining(ancestor, target){
for (const ch of ancestor.children){
if (ch === target || ch.contains(target)) return ch;
}
return null;
}
function getElementTarget(e) {
// If target is already an Element, use it
if (e.target instanceof Element) return e.target;
// Otherwise, walk the composed/path for the first Element
const path = (typeof e.composedPath === 'function') ? e.composedPath() : [];
for (const n of path) if (n instanceof Element) return n;
return null;
}
// ---------------- Dim everything except the trigger branch (sibling branches only) ----------------
function dimAllOtherBranches(container, trigger){
undim(); // clear previous
const dimEls = [];
const wrappedTexts = [];
const pathEls = [];
// Build ELEMENT-only path [container -> ... -> trigger]
const path = [];
for (let el = trigger; el && el !== container; el = el.parentElement) path.push(el);
path.push(container);
path.reverse();
// At each ancestor level, find the *direct* child that leads to the trigger
for (let i = 0; i < path.length; i++){
const anc = path[i];
const branchChild = (i < path.length - 1) ? directChildContaining(anc, path[i+1]) : path[i]; // last step is the trigger itself
// Fade element siblings (whole branches)
for (const child of anc.children){
if (child === branchChild) continue; // keep the path branch crisp
// Never fade any element that is (or contains) the trigger
if (child === trigger || child.contains(trigger)) continue;
child.style.transition = `opacity ${DIM_EASE_MS}ms ease`;
child.style.opacity = String(DIM_OPACITY);
dimEls.push(child);
}
// Fade TEXT NODE siblings directly under this ancestor (outside branchChild)
anc.childNodes.forEach(node => {
if (node.nodeType !== 3) return; // text only
if (!node.nodeValue || !node.nodeValue.trim()) return;
// If this text node sits inside branchChild, skip
if (branchChild && branchChild.contains && branchChild.contains(node)) return;
const span = document.createElement("span");
span.style.transition = `opacity ${DIM_EASE_MS}ms ease`;
span.style.opacity = String(DIM_OPACITY);
span.textContent = node.nodeValue;
node.parentNode.replaceChild(span, node);
wrappedTexts.push(span);
});
// Keep a reference to the path elements (so we can explicitly restore opacity if needed)
if (anc && anc.nodeType === 1) pathEls.push(anc);
}
// Hard-guard: explicitly set opacity:1 on the entire path to neutralize any inherited fade
pathEls.forEach(el => {
el.style.opacity = "1";
});
dimCtx = { container, dimEls, wrappedTexts, pathEls };
}
function undim(){
if (!dimCtx) return;
const { dimEls, wrappedTexts, pathEls } = dimCtx;
// Animate back
dimEls.forEach(el => {
el.style.transition = `opacity ${DIM_EASE_MS}ms ease`;
el.style.opacity = "1";
// remove inline style after the animation so we don't override site CSS
setTimeout(() => { if (el) el.style.opacity = ""; }, DIM_EASE_MS + 50);
});
wrappedTexts.forEach(span => {
span.style.transition = `opacity ${DIM_EASE_MS}ms ease`;
span.style.opacity = "1";
span.addEventListener("transitionend", () => {
if (!span.parentNode) return;
span.parentNode.replaceChild(document.createTextNode(span.textContent || ""), span);
}, { once:true });
});
// Clear hard-guard on path
pathEls.forEach(el => { if (el) el.style.opacity = ""; });
dimCtx = null;
}
// ---------------- Positioning (centered, edge-aware, flip) ----------------
function clamp(v,min,max){ return Math.max(min,Math.min(max,v)); }
function measureBubbleForPlacement(){
const wasOpen = bubble.classList.contains("is-open");
if (!wasOpen){ bubble.style.visibility="hidden"; bubble.classList.add("is-open"); }
const rect = bubble.getBoundingClientRect();
if (!wasOpen){ bubble.classList.remove("is-open"); bubble.style.visibility=""; }
return { w: rect.width, h: rect.height };
}
function placeAnchored(trigger){
const vw=innerWidth, vh=innerHeight;
const r = trigger.getBoundingClientRect();
const { w, h } = measureBubbleForPlacement();
let left = r.left + (r.width/2) - (w/2);
left = clamp(left, EDGE_PADDING, Math.max(EDGE_PADDING, vw - EDGE_PADDING - w));
const topBelow = r.bottom + OFFSET_Y;
const spaceBelow = vh - topBelow - EDGE_PADDING;
const placeBelow = spaceBelow >= h;
let top = placeBelow ? topBelow : (r.top - h - OFFSET_Y);
top = clamp(top, EDGE_PADDING, Math.max(EDGE_PADDING, vh - EDGE_PADDING - h));
bubble.style.left = left + "px";
bubble.style.top = top + "px";
const br = bubble.getBoundingClientRect();
if (br.bottom > vh - EDGE_PADDING){
bubble.style.maxHeight = (vh - 2*EDGE_PADDING) + "px";
bubble.style.overflowY = "auto";
} else {
bubble.style.maxHeight = "none";
bubble.style.overflowY = "visible";
}
}
// ---------------- Open / Close (place → fade/scale) ----------------
function animateIn(){
bubble.style.transition = "none";
bubble.style.opacity = "0";
bubble.style.transform = "scale(0.95)";
void bubble.offsetWidth;
bubble.style.transition = "opacity .18s ease, transform .18s ease";
bubble.style.opacity = "1";
bubble.style.transform = "scale(1)";
}
function animateOut(done){
bubble.style.transition = "opacity .16s ease, transform .16s ease";
bubble.style.opacity = "0";
bubble.style.transform = "scale(0.95)";
const end = () => { bubble.removeEventListener("transitionend", end); done && done(); };
bubble.addEventListener("transitionend", end);
setTimeout(end, 260);
}
function openFromTrigger(trigger){
if (current && current !== trigger) forceClose();
current = trigger;
trigger.setAttribute("aria-expanded","true");
elH.textContent = trigger.getAttribute("data-tt-h") || "";
elB.textContent = trigger.getAttribute("data-tt-b") || "";
bubble.classList.add("is-open");
bubble.setAttribute("aria-hidden","false");
placeAnchored(trigger);
animateIn();
const container = findTextContainer(trigger);
dimAllOtherBranches(container, trigger);
hoverCount = 0;
cancelCloseTimer();
}
function forceClose(){
if (!current) return;
bubble.classList.remove("is-open");
bubble.setAttribute("aria-hidden","true");
current.setAttribute("aria-expanded","false");
current = null;
undim();
hoverCount = 0;
cancelCloseTimer();
}
function closeWithAnim(){
if (!current) return;
const t = current;
animateOut(() => {
bubble.classList.remove("is-open");
bubble.setAttribute("aria-hidden","true");
t.setAttribute("aria-expanded","false");
current = null;
undim();
});
}
function scheduleClose(){
cancelCloseTimer();
closeTimer = setTimeout(() => {
if (hoverCount <= 0 && !isCoarse()) closeWithAnim();
}, CLOSE_DELAY);
}
function cancelCloseTimer(){ if (closeTimer){ clearTimeout(closeTimer); closeTimer = null; } }
// ---------------- Hover-intent (desktop) ----------------
function onZoneEnter(){ if (isCoarse()) return; hoverCount++; cancelCloseTimer(); }
function onZoneLeave(){ if (isCoarse()) return; hoverCount = Math.max(0, hoverCount - 1); if (hoverCount === 0) scheduleClose(); }
bubble.addEventListener("pointerenter", onZoneEnter, true);
bubble.addEventListener("mouseenter", onZoneEnter, true);
bubble.addEventListener("pointerleave", onZoneLeave, true);
bubble.addEventListener("mouseleave", onZoneLeave, true);
const handleEnter = (e) => {
if (isCoarse()) return;
const target = getElementTarget(e);
if (!target) return;
const t = target.closest(".tt-trigger");
if (!t) return;
onZoneEnter();
if (!current || current !== t) openFromTrigger(t);
};
const handleLeave = (e) => {
if (isCoarse()) return;
const target = getElementTarget(e);
if (!target) return;
const t = target.closest(".tt-trigger");
if (!t) return;
onZoneLeave();
};
document.addEventListener("pointerenter", handleEnter, true);
document.addEventListener("mouseenter", handleEnter, true);
document.addEventListener("pointerleave", handleLeave, true);
document.addEventListener("mouseleave", handleLeave, true);
// ---------------- Keyboard ----------------
document.addEventListener("focusin", (e) => {
if (!e.target) return;
const t = e.target.closest(".tt-trigger");
if (t) openFromTrigger(t);
});
document.addEventListener("focusout", (e) => {
if (!e.target) return;
const t = e.target.closest(".tt-trigger");
if (t && current === t) closeWithAnim();
});
// ---------------- Mobile / coarse ----------------
document.addEventListener("pointerdown", (e) => {
if (!isCoarse()) return;
const t = e.target.closest(".tt-trigger");
if (!t) return;
e.preventDefault();
e.stopPropagation();
if (current === t && bubble.classList.contains("is-open")) { closeWithAnim(); return; }
openFromTrigger(t);
}, true);
document.addEventListener("click", (e) => {
if (!isCoarse()) return;
if (!bubble.classList.contains("is-open")) return;
const inBubble = !!e.target.closest(".tt-bubble");
const onTrigger = !!e.target.closest(".tt-trigger");
if (!inBubble && !onTrigger) closeWithAnim();
}, true);
// Close button + ESC
elClose.addEventListener("click", closeWithAnim);
document.addEventListener("keydown", (e) => { if (e.key === "Escape") closeWithAnim(); });
// Reposition on resize/scroll while open
const reposition = () => { if (!current) return; placeAnchored(current); };
addEventListener("resize", reposition, { passive: true });
addEventListener("scroll", reposition, { passive: true });
});
/* Tooltip Styles */
/* Trigger */
.tt-trigger {
cursor: help;
text-decoration: underline dotted;
text-underline-offset: .2em;
color: inherit;
}
.tt-trigger:focus-visible{ outline:2px solid currentColor; outline-offset:2px; }
/* Bubble */
.tt-bubble{
position: fixed;
z-index: 10;
max-width: 17rem;
background: var(--_theme---background-primary);
box-shadow: 0 4px 24px rgba(0,0,0,.05);
border-radius: var(--radius--large);
border-style: solid;
border-color: var(--_theme---border-tertiary);
padding: var(--_spacing---space--1-5rem);
pointer-events: none;
opacity: 0;
transform: translate3d(0,0,0) scale(.98);
transition: opacity .3s ease, transform .3s ease;
will-change: transform, opacity;
}
.tt-bubble.is-open{ opacity:1; transform:translate3d(0,0,0) scale(1); pointer-events:auto; }
.tt-h{
margin-bottom: var(--_spacing---space--0-5rem);
font-size: var(--_typography---font-size--body-3);
font-family: var(--_typography---font--secondary-family);
line-height: var(--_typography---line-height--1-6);
color: var(--_theme---foreground-primary);
}
.tt-b{
margin:0;
font-size: var(--_typography---font-size--caption);
line-height: var(--_typography---line-height--1-6);
color: var(--_theme---foreground-tertiary);
}
/* Mobile close button */
.tt-close {
display: none;
}
@media (hover: none), (pointer: coarse) {
.tt-close {
display: inline-flex;
position: absolute;
top: 0.5rem;
right: 0.5rem;
width: 32px;
height: 32px;
align-items: center;
justify-content: center;
border: 0;
border-radius: 999px;
background: transparent;
font-size: 22px;
line-height: 1;
color: inherit;
cursor: pointer;
touch-action: manipulation;
}
.tt-close:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
.tt-close:hover { opacity: 1; }
}
html[lang="de-DE"] h1, html[lang="de-DE"] h2, html[lang="de-DE"] h3,
html[lang="de-DE"] h4, html[lang="de-DE"] h5, html[lang="de-DE"] h6,
html[lang="de-DE"] p, html[lang="de-DE"] li,
html[lang="fr-FR"] h1, html[lang="fr-FR"] h2, html[lang="fr-FR"] h3,
html[lang="fr-FR"] h4, html[lang="fr-FR"] h5, html[lang="fr-FR"] h6,
html[lang="fr-FR"] p, html[lang="fr-FR"] li {
overflow-wrap: break-word;
hyphens: auto;
}
:root {
--nav--icon-thickness: var(--border-width--main);
--nav--hamburger-thickness: var(--nav--icon-thickness);
--nav--hamburger-gap: var(--_spacing---space--0-25rem);
--nav--hamburger-rotate: 45;
--nav--dropdown-duration: 300ms;
--nav--dropdown-open-duration: 600ms;
--nav--dropdown-delay: 0ms;
--ease-expo-out: cubic-bezier(0.16, 1, 0.3, 1);
}
/* ========== GENERAL RESPONSIVE RULES ========== */
/* Lock body when nav is open (script toggles .is-nav-open) */
@media (width < 56em) {
body.is-nav-open { overflow: hidden; }
}
@container (min-width: 56em) {
.nav_wrap.is-desktop { display: block; }
.nav_wrap.is-mobile { display: none; }
}
@container (width < 28em) {
.nav_mobile_layout .nav_actions_mobile { display: none; }
}
/* ========== DROPDOWN STYLING ========== */
html:not(.wf-design-mode) .nav_dropdown_component > .w-dropdown-list {
display: grid !important;
grid-template-columns: minmax(0, 1fr);
grid-template-rows: 0fr;
transition:
grid-template-rows var(--nav--dropdown-duration) var(--ease-expo-out),
visibility 0s var(--nav--dropdown-duration),
opacity var(--nav--dropdown-duration) var(--ease-expo-out);
visibility: hidden;
opacity: 0;
}
html:not(.wf-design-mode) .nav_dropdown_component > .w-dropdown-list.w--open {
visibility: visible;
opacity: 1;
transition:
grid-template-rows var(--nav--dropdown-duration) var(--ease-expo-out),
visibility 0s 0s,
opacity var(--nav--dropdown-duration) var(--ease-expo-out);
}
.nav_dropdown_component > .w-dropdown-list > * { overflow: hidden; }
.nav_dropdown_component:has(> .w-dropdown-toggle[aria-expanded="true"]) > .w-dropdown-list {
--nav--dropdown-duration: var(--nav--dropdown-open-duration);
grid-template-rows: 1fr;
}
/*.nav_wrap.is-desktop:has(.nav_dropdown_component > .w-dropdown-toggle.w--open[aria-expanded="false"])
.nav_dropdown_component:has(> .w--open[aria-expanded="true"]) > .w-dropdown-list {
transition-delay: var(--nav--dropdown-duration);
}*/
/* Dropdown caret rotation */
.nav_links_svg.is-desktop { transition: transform 750ms var(--ease-expo-out); }
.w-dropdown-toggle[aria-expanded="true"] .nav_links_svg.is-desktop { transform: rotate(-180deg); }
.nav_links_svg_line.is-2 { transition: transform 500ms var(--ease-expo-out); }
.w-dropdown-toggle[aria-expanded="true"] .nav_links_svg_line.is-2 { transform: rotate(0deg); }
/* open (replicates your original transforms) */
.nav_btn_wrap[aria-expanded="true"] .nav_btn_line:nth-child(1),
.nav_btn_wrap[aria-expanded="true"] > * > :first-child {
transform:
translateY(calc(var(--nav--hamburger-thickness) * 1 + var(--nav--hamburger-gap) * 1))
rotate(calc(var(--nav--hamburger-rotate) * -1deg));
}
.nav_btn_wrap[aria-expanded="true"] .nav_btn_line:nth-child(2),
.nav_btn_wrap[aria-expanded="true"] > * > :nth-child(2) {
opacity: 0;
}
.nav_btn_wrap[aria-expanded="true"] .nav_btn_line:nth-child(3),
.nav_btn_wrap[aria-expanded="true"] > * > :last-child {
transform:
translateY(calc(var(--nav--hamburger-thickness) * -1 + var(--nav--hamburger-gap) * -1))
rotate(calc(var(--nav--hamburger-rotate) * 1deg));
width: 1rem;
}
/* ========== HOVER & THEME EFFECTS ========== */
@media (hover: hover) and (pointer: fine) {
body:has(.nav_dropdown_item:hover) .nav_dropdown_item:not(:hover) > * > * {
color: var(--_theme---foreground-tertiary);
}
.nav_dropdown_link {
transition:
background-color 300ms ease,
color 300ms ease;
}
.nav_dropdown_item:hover .nav_dropdown_link {
background: var(--_theme---background-tertiary);
color: var(--_theme---foreground-primary);
}
.nav_secondary_wrap .nav_dropdown_item:hover .nav_dropdown_link {
background: var(--_theme---background-tertiary);
color: var(--_theme---foreground-primary);
}
.nav_wrap.is-mobile .nav_dropdown_item:hover .nav_dropdown_link {
color: var(--_theme---foreground-primary);
}
.nav_links_text { transition: color 500ms var(--ease-expo-out); }
.nav_links_svg {
transition:
transform 500ms var(--ease-expo-out),
color 500ms var(--ease-expo-out);
}
.nav_links_item:hover .nav_links_text,
.nav_links_item:hover .nav_links_svg { color: var(--_theme---foreground-primary); }
}
/* ========== LAYOUT / UTILITY (kept, de-Webflow’d) ========== */
.nav_wrap.is-mobile [data-open-on-mobile] > .w-dropdown-toggle { display: none; }
.nav_wrap.is-mobile [data-open-on-mobile] > .w-dropdown-list {
visibility: visible;
opacity: 1;
display: block;
grid-template-rows: 1fr;
}
.nav_buttons_item .button_main_wrap { width: 100%; min-width: max-content; }
/* Optional: fade out mobile actions while open */
.nav_actions_wrap { transition: opacity 500ms var(--ease-expo-out); }
body.is-nav-open .nav_actions_mobile .nav_actions_wrap {
opacity: 0;
pointer-events: none;
}
.nav_links_item:first-child {
border-top: none;
}
/* ========== Breadcrumbs ========== */
.breadcrumb_text.is_linked[href="#"],
.breadcrumb_text:has(+.breadcrumb_text.is_linked:not([href="#"])) {
display: none;
}
.breadcrumb_text.is_linked:not([href="#"]) {
display: block;
}
document.addEventListener("DOMContentLoaded", function () {
document.querySelectorAll(".nav_component").forEach((root) => {
if (root.dataset.scriptInitialized) return;
root.dataset.scriptInitialized = "true";
if (!window.gsap) { console.error("GSAP not found"); return; }
const btn = root.querySelector('.nav_btn_wrap');
const menu = root.querySelector('.nav_menu_wrap');
if (!btn || !menu) { console.warn('Missing .nav_btn_wrap or .nav_menu_wrap in', root); return; }
// a11y setup (scoped)
if (!btn.hasAttribute('type')) btn.setAttribute('type', 'button');
if (!btn.hasAttribute('aria-expanded')) btn.setAttribute('aria-expanded', 'false');
if (!menu.id) menu.id = 'primary-nav-' + Math.random().toString(36).slice(2);
if (!btn.hasAttribute('aria-controls')) btn.setAttribute('aria-controls', menu.id);
menu.setAttribute('aria-hidden', 'true');
// targets (scoped)
const items = Array.from(menu.querySelectorAll('.nav_links_item'));
const actions = menu.querySelector('.nav_menu_actions_wrap');
// feature detection
const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
const canClipInset = !!(window.CSS && CSS.supports && (
CSS.supports('clip-path','inset(0 0 100% 0)') || CSS.supports('-webkit-clip-path','inset(0 0 100% 0)')
));
const useClip = canClipInset && !prefersReduced;
// durations from CSS vars
function readDur(varName, fallbackSec) {
const v = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();
if (!v) return fallbackSec;
if (v.endsWith('ms')) return parseFloat(v)/1000;
if (v.endsWith('s')) return parseFloat(v);
const n = parseFloat(v);
return isNaN(n) ? fallbackSec : n;
}
const OPEN_DUR = readDur('--nav--menu-open-duration', 0.8);
const CLOSE_DUR = readDur('--nav--menu-close-duration', 0.4);
// state per component
let isOpen = false;
let current = null;
function setMenuVisibleForAnim() {
menu.style.display = 'flex'; // ensure it's shown before anim
menu.removeAttribute('hidden');
menu.setAttribute('aria-hidden', 'false');
menu.style.willChange = useClip ? 'clip-path' : 'transform, opacity';
}
function clearMenuInline() {
gsap.set(menu, { clearProps: 'clipPath,webkitClipPath,opacity,transform,willChange,pointerEvents' });
}
// OPEN
function playOpen() {
setMenuVisibleForAnim();
menu.style.pointerEvents = 'none';
document.body.classList.add('is-nav-open');
btn.setAttribute('aria-expanded', 'true');
if (useClip) {
gsap.set(menu, { clipPath: 'inset(0 0 100% 0)', webkitClipPath: 'inset(0 0 100% 0)' });
} else {
gsap.set(menu, { yPercent: -2, opacity: 0 });
}
if (items.length) gsap.set(items, { y: 20, autoAlpha: 0 });
if (actions) gsap.set(actions, { y: 20, autoAlpha: 0 });
const tl = gsap.timeline({ defaults: { ease: 'power3.out' } });
if (useClip) {
tl.to(menu, {
clipPath: 'inset(0 0 0% 0)',
webkitClipPath: 'inset(0 0 0% 0)',
duration: prefersReduced ? 0.01 : OPEN_DUR,
ease: 'expo.out'
}, 0);
} else {
tl.to(menu, { yPercent: 0, opacity: 1, duration: prefersReduced ? 0.01 : Math.min(OPEN_DUR, 0.36) }, 0.02);
}
if (items.length) {
tl.to(items, { y: 0, autoAlpha: 1, stagger: prefersReduced ? 0 : 0.08, duration: prefersReduced ? 0.01 : 0.4 }, 0.10);
}
if (actions) {
const base = 0.10 + (items.length ? items.length * (prefersReduced ? 0 : 0.08) : 0);
tl.to(actions, { y: 0, autoAlpha: 1, duration: prefersReduced ? 0.01 : 0.4 }, base);
}
tl.add(() => { menu.style.pointerEvents = 'auto'; }, '>-0.1');
// listeners (per open)
document.addEventListener('keydown', onKeydown);
menu.addEventListener('click', onMenuLinkClick);
return tl;
}
// CLOSE (fade all together, then clip inset close)
function playClose() {
menu.style.pointerEvents = 'none';
btn.setAttribute('aria-expanded', 'false');
document.body.classList.remove('is-nav-open');
const tl = gsap.timeline({ defaults: { ease: 'power3.out' } });
const fadeTargets = items.concat(actions ? [actions] : []);
if (fadeTargets.length) tl.to(fadeTargets, { autoAlpha: 0, y: 0, duration: prefersReduced ? 0.01 : 0.2 }, 0);
if (useClip) {
gsap.set(menu, { clipPath: 'inset(0 0 0% 0)', webkitClipPath: 'inset(0 0 0% 0)' });
tl.to(menu, {
clipPath: 'inset(0 0 100% 0)',
webkitClipPath: 'inset(0 0 100% 0)',
duration: prefersReduced ? 0.01 : CLOSE_DUR
}, '>-0.02');
} else {
tl.to(menu, { yPercent: -2, opacity: 0, duration: prefersReduced ? 0.01 : Math.min(CLOSE_DUR, 0.28) }, '>-0.02');
}
tl.add(() => {
menu.style.display = 'none';
menu.setAttribute('aria-hidden', 'true');
clearMenuInline();
if (items.length) gsap.set(items, { clearProps: 'all' });
if (actions) gsap.set(actions, { clearProps: 'all' });
// remove listeners added on open
document.removeEventListener('keydown', onKeydown);
menu.removeEventListener('click', onMenuLinkClick);
});
return tl;
}
function openMenu() {
if (isOpen) return;
isOpen = true;
if (current && current.isActive()) current.kill();
current = playOpen();
}
function closeMenu() {
if (!isOpen) return;
isOpen = false;
if (current && current.isActive()) current.kill();
current = playClose();
}
function onKeydown(e){ if (e.key === 'Escape' && isOpen) { e.preventDefault(); closeMenu(); } }
function onMenuLinkClick(e){
const a = e.target.closest('a[href]');
if (!a) return;
const url = new URL(a.href, location.href);
if (url.origin === location.origin) {
e.preventDefault();
const tl = playClose();
tl.eventCallback('onComplete', () => { window.location.href = a.href; });
isOpen = false;
}
}
// Toggle (scoped)
btn.addEventListener('click', () => (isOpen ? closeMenu() : openMenu()));
// Normalize if visible on load (scoped)
if (getComputedStyle(menu).display !== 'none') {
btn.setAttribute('aria-expanded', 'true');
menu.setAttribute('aria-hidden', 'false');
document.body.classList.add('is-nav-open');
isOpen = true;
}
});
});
(function () {
'use strict';
// ---------- tiny utils ----------
var NS = 'navBundleInit';
function onceFlag(el, k){ k=k||'scriptInitialized'; if (el.dataset[k]) return true; el.dataset[k]='true'; return false; }
function ready(fn){ if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',fn,{once:true});} else { fn(); } }
// ---------- 1) Ask Claude about this page ----------
function initAskPage(){
var buttons = document.querySelectorAll('[data-ask-page]');
if (!buttons.length) return; // Early exit if no buttons
buttons.forEach(function(btn){
if (onceFlag(btn, NS)) return;
btn.addEventListener('click', function (e) {
e.preventDefault();
var pageUrl = window.location.href;
var prompt = "Read this page " + pageUrl + " so that I can ask you questions about it";
var claudeUrl = new URL('https://claude.ai/new');
claudeUrl.searchParams.set('q', prompt);
window.open(claudeUrl.toString(), '_blank', 'noopener');
});
});
}
// ---------- 2) Copy page content as Markdown (Turndown) ----------
var _turndownReady;
function ensureTurndown(){
if (window.TurndownService) return Promise.resolve();
if (_turndownReady) return _turndownReady;
_turndownReady = new Promise(function(resolve, reject){
var s = document.createElement('script');
s.src = 'https://unpkg.com/turndown/dist/turndown.js';
s.async = true;
s.onload = function(){ resolve(); };
s.onerror = function(){ reject(new Error('Failed to load Turndown')); };
document.head.appendChild(s);
});
return _turndownReady;
}
function initCopyAsMarkdown(){
var copyButton = document.getElementById('copy-as-markdown');
if (!copyButton) return; // Early exit
if (onceFlag(copyButton, NS)) return;
var buttonTextEl = copyButton.querySelector('.nav_dropdown_text') || copyButton;
var originalText = buttonTextEl.textContent;
copyButton.addEventListener('click', function(){
ensureTurndown().then(function(){
try {
var TurndownService = window.TurndownService;
var turndownService = new TurndownService({
headingStyle: 'atx',
codeBlockStyle: 'fenced',
fence: '```',
emDelimiter: '*',
strongDelimiter: '**',
linkStyle: 'inlined'
});
// Skip junk
turndownService.addRule('skipWebflowElements', {
filter: function(node){
return node.nodeName === 'SCRIPT' ||
node.nodeName === 'STYLE' ||
(node.className && (String(node.className).includes('w-editor') || String(node.className).includes('w-embed')));
},
replacement: function(){ return ''; }
});
buttonTextEl.textContent = 'Copying...';
copyButton.disabled = true;
var contentElement = document.querySelector('main') ||
document.querySelector('.main-content') ||
document.querySelector('body');
if (!contentElement) throw new Error('No content found to copy');
var cloned = contentElement.cloneNode(true);
cloned.querySelectorAll('script, style, nav, footer, .w-nav, .footer').forEach(function(el){ el.remove(); });
var markdown = turndownService.turndown(cloned);
var done = function(){
buttonTextEl.textContent = 'Copied!';
setTimeout(function(){
buttonTextEl.textContent = originalText;
copyButton.disabled = false;
}, 2000);
};
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard.writeText(markdown).then(done, function(err){ throw err; });
} else {
var ta = document.createElement('textarea');
ta.value = markdown; ta.style.position='fixed'; ta.style.opacity='0';
document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta);
done();
}
} catch (err){
console.error('Copy failed:', err);
buttonTextEl.textContent = 'Copy failed';
setTimeout(function(){
buttonTextEl.textContent = originalText;
copyButton.disabled = false;
}, 2000);
}
}).catch(function(err){
console.error('Turndown load failed:', err);
buttonTextEl.textContent = 'Copy failed';
setTimeout(function(){
buttonTextEl.textContent = originalText;
copyButton.disabled = false;
}, 2000);
});
});
}
// ---------- init all ----------
ready(function(){
initAskPage();
initCopyAsMarkdown();
});
// Optional: expose minimal API for debugging (comment out in production if not needed)
// window.NavBundle = {
// initCopyAsMarkdown: initCopyAsMarkdown,
// initAskPage: initAskPage
// };
})();
Explore here
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
THUMBNAIL BG COLORS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
[data-thumbnail-bg="Clay"] { background-color: var(--swatch--clay); }
[data-thumbnail-bg="Cactus"] { background-color: var(--swatch--cactus); }
[data-thumbnail-bg="Coral"] { background-color: var(--swatch--coral); }
[data-thumbnail-bg="Fig"] { background-color: var(--swatch--fig); }
[data-thumbnail-bg="Heather"] { background-color: var(--swatch--heather); }
[data-thumbnail-bg="Oat"] { background-color: var(--swatch--oat); }
[data-thumbnail-bg="Olive"] { background-color: var(--swatch--olive); }
[data-thumbnail-bg="Sky"] { background-color: var(--swatch--sky); }
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
CONDITIONAL STYLES BASED ON IF IMAGE OR VIDEO ARE VISIBLE
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
.hero_tutorial_post_wrap:has(+ .tutorial_post_media_wrap :is(.tutorial_post_image_wrap, .tutorial_post_video_wrap):not(.w-condition-invisible)) {
border-bottom: none !important;
}
.tutorial_post_media_wrap:has(+ .tutorial_post_wrap:not(.w-condition-invisible)) .u-section-spacer {
display: none !important;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
TABLE OF CONTENTS
Adding here so classes don't get accidentally cleared
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
.tutorial_post_toc_list {
color: var(--_theme---foreground-tertiary);
font-size: var(--_typography---font-size--body-3);
}
.tutorial_post_toc_item {
margin-left: -0.0625rem;
padding-top: var(--_spacing---space--0-25rem);
padding-bottom: var(--_spacing---space--0-25rem);
padding-left: var(--_spacing---space--1rem);
border-left-style: solid;
border-left-width: var(--border-width--main);
border-left-color: var(--_theme---border-secondary);
}
.tutorial_post_toc_item.active {
border-left-color: var(--_theme---heroes-accent);
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
ANCHOR LINK
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* offset for <span class="anchor"> that takes fixed header height into account */
.anchor {
position: relative;
top: calc(-1 * var(--_spacing---space--4rem) - 120px);
}
/* Copy anchor link to clipboard button */
.anchor-link-box {
/* quick btn reset */
background: none;
border: none;
padding: 0;
cursor: pointer;
/* other styles */
position: absolute !important;
left: -3rem;
top: 50%;
transform: translateY(-50%);
opacity: 0;
transition: opacity 0.2s ease;
width: 2.5rem;
height: 2.5rem;
background: var(--_theme---background-tertiary);
border: var(--border-width--main) solid var(--_theme---border-tertiary);
border-radius: var(--radius--main);
display: flex;
align-items: center;
justify-content: center;
padding: var(--_spacing---space--0-5rem);
}
.anchor-link-box:hover {
opacity: 1;
}
.tooltip {
opacity: 0;
transition: opacity 0.2s ease;
position: absolute;
left: 50%;
bottom: calc(100% + 0.5rem);
transform: translateX(-50%);
background: var(--_theme---button-primary--background);
color: var(--_theme---button-primary--text);
white-space: nowrap;
padding: 0.125rem 0.5rem;
border-radius: var(--radius--x-small);
font-family: var(--_typography---font--primary-family);
font-size: var(--_typography---font-size--caption);
line-height: var(--_typography---line-height--1-6);
}
.tooltip.active {
opacity: 1;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
HIDE EMPTY <p> TAGS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
p:empty,
p:has(> br:only-child) {
display: none;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
BORDER RADIUS ON RICH TEXT VIDEOS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
.w-richtext-figure-type-video {
border-radius: var(--radius--main);
overflow: hidden;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
FIX GRID SPACING IF TUTORIAL HAS NO VIDEO
- - - - - - - - - - - - - - - - - - - - - - - - - - - - */
.tutorial_post_video_layout:has(.w-dyn-bind-empty) {
display: none;
}
document.addEventListener('DOMContentLoaded', function() {
// Helper function to convert text to slug
function textToSlug(text) {
return text
.toLowerCase()
.trim()
.replace(/[''"&]/g, '')
.replace(/"([^"]+)"/, '$1')
.replace(/\s*[:.,?—–\\/-]\s*/g, '-')
.replace(/\s+/g, '-')
.replace(/-+/g, '-')
.replace(/^-+|-+$/g, '');
}
// Track used slugs to prevent duplicate IDs
const usedSlugs = new Set();
function getUniqueSlug(baseSlug) {
let slug = baseSlug;
let counter = 1;
while (usedSlugs.has(slug)) {
slug = `${baseSlug}-${counter}`;
counter++;
}
usedSlugs.add(slug);
return slug;
}
// Add/Remove class helper functions
const addClass = (element, className) => {
if (element && className) {
element.classList.add(className);
}
};
const removeClass = (element, className) => {
if (element && className) {
element.classList.remove(className);
}
};
// Debounce helper for resize events
function debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
// Get elements
const tutorialContent = document.getElementById('tutorial_content');
const tocContainer = document.getElementById('tutorial_toc');
if (!tutorialContent || !tocContainer) {
return;
}
const h2Elements = tutorialContent.querySelectorAll('h2');
if (h2Elements.length === 0) {
tocContainer.style.display = 'none';
return;
}
// Create ToC list
const tocList = document.createElement('ul');
addClass(tocList, 'tutorial_post_toc_list');
const tocItems = [];
// Copy anchor link to clipboard with tooltip
const copyAnchorToClipboard = (element, spanElement, mouseEnterTime = 750) => {
let hoverTimeout;
let tooltip;
element.addEventListener("mouseenter", function () {
clearTimeout(hoverTimeout);
tooltip = document.createElement("span");
addClass(tooltip, 'tooltip');
tooltip.innerText = "Copy anchor link";
this.appendChild(tooltip);
hoverTimeout = setTimeout(() => {
addClass(tooltip, "active");
}, mouseEnterTime);
});
element.addEventListener("mouseleave", function () {
clearTimeout(hoverTimeout);
if (tooltip) {
removeClass(tooltip, "active");
this.removeChild(tooltip);
tooltip = null;
}
});
element.addEventListener("click", function (event) {
event.preventDefault();
clearTimeout(hoverTimeout);
if (spanElement && spanElement.classList.contains("anchor")) {
const id = spanElement.id;
if (tooltip) {
tooltip.innerText = "Copied!";
addClass(tooltip, "active");
const url = new URL(window.location.href);
url.searchParams.delete("topic");
const anchorLink = `${url.origin}${url.pathname}#${id}`;
if (navigator && navigator.clipboard) {
navigator.clipboard.writeText(anchorLink).catch((err) => {
console.error("Could not copy text: ", err);
});
}
hoverTimeout = setTimeout(() => {
removeClass(tooltip, "active");
}, 1500);
}
} else {
console.error("Couldn't find Span with the ID");
}
});
};
// Anchor link SVG icon
const anchorLinkSVG = `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M7.59608 7.99088C9.01909 7.43035 10.5884 7.86617 11.5326 8.96256L11.7123 9.19108C11.7695 9.27004 11.8243 9.35165 11.8754 9.4362L12.018 9.69792L12.0531 9.79362C12.1116 10.0184 12.0068 10.2611 11.7904 10.3678C11.5738 10.4744 11.3168 10.4098 11.1742 10.2262L11.1205 10.1403L11.018 9.95377C10.9816 9.8936 10.9434 9.83515 10.9027 9.77897L10.7738 9.61491C10.0992 8.83195 8.97855 8.52172 7.96327 8.92155C6.67866 9.42757 6.04713 10.8791 6.55311 12.1637L7.83631 15.4206C8.34249 16.7049 9.794 17.3357 11.0785 16.8298C12.3629 16.3236 12.9937 14.8721 12.4877 13.5876L12.3969 13.3551C12.2957 13.0983 12.4213 12.808 12.6781 12.7067C12.935 12.6055 13.2253 12.732 13.3265 12.9889L13.4183 13.2214C14.1268 15.0198 13.2432 17.052 11.4447 17.7604C9.64625 18.4688 7.61412 17.5852 6.90565 15.7868L5.62245 12.5299C4.91434 10.7317 5.79792 8.69938 7.59608 7.99088ZM8.55506 2.23991C10.3536 1.53146 12.3857 2.41505 13.0941 4.21354L14.3773 7.4694C15.0857 9.26779 14.202 11.2999 12.4037 12.0085C10.9807 12.569 9.41236 12.1332 8.46815 11.0368L8.28749 10.8092C8.17297 10.6512 8.07027 10.481 7.98182 10.3014C7.86013 10.0539 7.96206 9.75458 8.20936 9.63249C8.4571 9.5105 8.7573 9.61229 8.87928 9.86002C8.9425 9.98839 9.0156 10.1089 9.09706 10.2214L9.22596 10.3844C9.90056 11.1677 11.022 11.4788 12.0375 11.0788C13.3218 10.5727 13.9524 9.12105 13.4467 7.83659L12.1644 4.57975C11.6584 3.29511 10.2059 2.66356 8.92128 3.1696C7.63695 3.67569 7.00633 5.12732 7.5121 6.41178L7.60389 6.64518C7.70479 6.902 7.57845 7.19247 7.32167 7.29362C7.06479 7.39475 6.77446 7.26823 6.67323 7.01139L6.58143 6.77897C5.87303 4.98058 6.75677 2.94846 8.55506 2.23991Z" fill="currentColor"/></svg>`;
// Process each H2 and build ToC
h2Elements.forEach((h2) => {
const headingText = h2.textContent;
const baseSlug = textToSlug(headingText);
const slug = getUniqueSlug(baseSlug);
// Add anchor span
const anchorSpan = document.createElement('span');
anchorSpan.id = slug;
addClass(anchorSpan, 'anchor');
h2.prepend(anchorSpan);
// Add anchor link box
const anchorLinkBox = document.createElement('button');
anchorLinkBox.type = 'button';
addClass(anchorLinkBox, 'anchor-link-box');
anchorLinkBox.innerHTML = anchorLinkSVG;
h2.prepend(anchorLinkBox);
// Initialize copy functionality
copyAnchorToClipboard(anchorLinkBox, anchorSpan);
// Create ToC item
const listItem = document.createElement('li');
addClass(listItem, 'tutorial_post_toc_item');
const link = document.createElement('a');
link.href = `#${slug}`;
const textDiv = document.createElement('div');
textDiv.textContent = headingText;
link.appendChild(textDiv);
listItem.appendChild(link);
tocList.appendChild(listItem);
tocItems.push({
element: listItem,
target: h2
});
});
tocContainer.appendChild(tocList);
// Configuration
const headerHeight = 134;
const activationOffset = 100;
// State
let currentActive = 0;
let ranges = [];
let frameRequested = false;
// Calculate activation ranges using getBoundingClientRect for reliability
// (offsetTop can be relative to offsetParent, not document)
function calculateRanges() {
const scrollY = window.scrollY;
ranges = tocItems.map((item, index) => {
const rect = item.target.getBoundingClientRect();
const absoluteTop = rect.top + scrollY;
const activationPoint = absoluteTop - headerHeight - activationOffset;
const nextAbsoluteTop = index < tocItems.length - 1
? tocItems[index + 1].target.getBoundingClientRect().top + scrollY
: Infinity;
const nextActivation = nextAbsoluteTop === Infinity
? Infinity
: nextAbsoluteTop - headerHeight - activationOffset;
return {
index: index,
start: Math.max(0, activationPoint),
end: nextActivation
};
});
}
// Update active section
function updateActiveSection() {
if (ranges.length === 0) return;
const scrollPosition = window.scrollY;
let newActive = 0;
// Find current range
if (scrollPosition < ranges[0].start) {
newActive = 0;
} else {
for (let i = 0; i < ranges.length; i++) {
if (scrollPosition >= ranges[i].start && scrollPosition < ranges[i].end) {
newActive = i;
break;
}
}
}
// Special case: if near bottom of page, activate last item
const scrollBottom = scrollPosition + window.innerHeight;
const documentHeight = document.documentElement.scrollHeight;
if (documentHeight - scrollBottom < 100) {
newActive = tocItems.length - 1;
}
// Update classes if changed
if (newActive !== currentActive) {
tocItems.forEach(item => removeClass(item.element, 'active'));
currentActive = newActive;
if (tocItems[currentActive]) {
addClass(tocItems[currentActive].element, 'active');
}
}
frameRequested = false;
}
// Scroll handler
function handleScroll() {
if (!frameRequested) {
frameRequested = true;
window.requestAnimationFrame(updateActiveSection);
}
}
// Recalculate on resize (debounced)
const handleResize = debounce(() => {
calculateRanges();
updateActiveSection();
}, 250);
// Smooth scroll behavior for ToC links
tocItems.forEach(item => {
item.element.querySelector('a').addEventListener('click', function(e) {
e.preventDefault();
const targetId = this.getAttribute('href').substring(1);
const targetElement = document.getElementById(targetId);
if (targetElement) {
const scrollTo = targetElement.parentElement.offsetTop - headerHeight - 20;
window.scrollTo({
top: scrollTo,
behavior: 'smooth'
});
}
});
});
// Initialize
calculateRanges();
addClass(tocItems[0].element, 'active');
// Handle hash on initial page load
if (window.location.hash) {
const hash = window.location.hash.substring(1);
const targetIndex = tocItems.findIndex(item =>
item.target.querySelector('.anchor')?.id === hash
);
if (targetIndex !== -1) {
tocItems.forEach(item => removeClass(item.element, 'active'));
addClass(tocItems[targetIndex].element, 'active');
currentActive = targetIndex;
}
}
// Re-check after browser might restore scroll position
requestAnimationFrame(() => {
requestAnimationFrame(() => {
calculateRanges();
updateActiveSection();
});
});
// Event listeners
window.addEventListener('scroll', handleScroll, { passive: true });
window.addEventListener('resize', handleResize);
// Visual Viewport API for mobile viewport changes (keyboard, browser chrome)
if (window.visualViewport) {
window.visualViewport.addEventListener('resize', handleResize);
window.visualViewport.addEventListener('scroll', handleResize);
}
// Browser back/forward navigation with hash changes
window.addEventListener('popstate', () => {
calculateRanges();
updateActiveSection();
});
// Handle dynamic content changes (if Webflow adds/removes content)
const observer = new MutationObserver(debounce(() => {
calculateRanges();
updateActiveSection();
}, 500));
observer.observe(tutorialContent, {
childList: true,
subtree: true,
attributes: false
});
// Recalculate after images load (affects layout positions)
const images = tutorialContent.querySelectorAll('img');
images.forEach(img => {
if (!img.complete) {
img.addEventListener('load', handleResize, { once: true });
img.addEventListener('error', handleResize, { once: true });
}
});
// Recalculate after fonts load
if (document.fonts && document.fonts.ready) {
document.fonts.ready.then(handleResize);
}
});
How to use Claude in Excel for HR: Headcount planningUse Claude to understand inherited spreadsheets, fix formula errors, and run what-if scenariosCategoryFinanceProductReading timeWatch time3min6minShareCopy linkhttps://claude.com/resources/tutorials/how-to-use-claude-in-excel-for-hr-headcount-planningClaude in Excel brings Claude directly into your spreadsheet workflow. It appears as a sidebar that can read your entire workbook—every tab, every formula, every relationship between cells—and help you understand, fix, and extend what's there.This tutorial walks through an HR headcount planning model: four tabs, formulas linking everywhere, and errors that need fixing. You'll see how to use plain language to get Claude to map a workbook you've inherited, trace and fix formula errors, run what-if scenarios, and build new calculations that reference data across sheets.What you can doUnderstand workbooks you didn't buildAsk Claude to explain how tabs connect. It reads everything first, then maps the data flow—which cells feed into which sheets, where assumptions live, how totals roll up.Find and fix formula errorsClaude catches broken references and traces where they cascade. Instead of hunting through tabs, you see every affected cell at once—and choose how to fix it.Run scenarios instantlyChange an assumption and see the impact across departments, totals, and downstream calculations. Claude recalculates and summarizes what shifted.Build formulas with business logicDescribe what you want calculated. Claude writes formulas that reference the right cells, apply conditional logic based on job levels or departments, and stay connected to your assumptions—not static values you'd have to update manually.Create visualizations from plain languageAsk for a pivot table or chart. Claude builds it from your data and tells you what stands out.In this videoFollow along with the video, or copy these prompts to try in your own workbook.0:51 — Get oriented in an inherited modelThe spreadsheet has four tabs—Assumptions, Headcount, Compensation, Summary—with formulas linking everywhere. Ask Claude to explain how it all connects before you start making changes."Walk me through this workbook—what's on each tab and how do they connect?"1:18 — Claude maps data flow and finds errorsClaude reads all four sheets, then returns a visual diagram showing how data flows from Assumptions through to Summary. It also catches #REF! errors you didn't ask about—and maps every cell they affect across three sheets.1:57 — Investigate a broken formulaA #REF! error is cascading through the model. Claude traces it to a deleted cell reference, analyzes the pattern in nearby cells, and figures out what the value should be."There's a #REF! error in cell E15 on the Headcount tab. What's causing it and can you fix it?"2:33 — Choose how to fix itClaude doesn't just fix the error—it explains the root cause, shows you the options (0, 1, or a custom value), and lets you decide. You stay in control of what changes.3:18 — Run a what-if scenarioChange one assumption and see the impact everywhere. Claude updates the model, then returns a before/after comparison by department so you can see which teams are hit hardest."Update the plan to assume 15% attrition instead of 10%. Show me what changes across departments."4:26 — Create a pivot table and chartDescribe the visualization you need. Claude builds a pivot table from your headcount data, adds a stacked bar chart, and surfaces insights—like which job level has the most people and where they're concentrated."Create a pivot table showing headcount by department and level, then add a stacked bar chart to visualize it."5:33 — Build a calculated column with business logicAsk for a new column and Claude writes actual formulas—not static values. Here, it pulls benefit rates from the Assumptions tab and applies different bonus percentages based on job level (10% for ICs, 15% for managers, 20% for directors)."Add a column that calculates the fully-loaded cost per employee using the rates on the Assumptions tab."What to noticeClaude reads before it answers. When you ask about the workbook, Claude doesn't guess—it reads all four sheets first, then explains how they connect. This prevents errors from incomplete context.Errors surface with their full impact. A single broken reference can cascade across multiple sheets. Claude shows you every affected cell so you understand the scope before you fix anything.Claude values your inputFor deeper understanding, ask Claude to explain its reasoning before making changes. You can always request that Claude walk through its thinking, and if something doesn't look right, undo (Cmd+Z or Ctrl+Z) reverses most actions.Formulas stay formulas. When Claude builds a new calculated column, it writes actual Excel formulas that reference your Assumptions tab and apply conditional logic. If your assumptions change later, the calculations update automatically.Get startedInstall Claude in Excel from the Microsoft AppSourceOpen it with Ctrl+Option+C (Mac) or Ctrl+Alt+C (Windows)Start with "Walk me through this workbook" on any spreadsheet you've inheritedClaude in Excel is available in beta on Max, Team, and Enterprise plans.Learn more:Claude in Excel help articleWhat is the Max plan?What you can doIn this videoWhat to noticeGet startedRelated tutorialsGetting started with Claude in ExcelGetting started with Claude in ExcelGetting started with Claude in ExcelTutorialTutorialTutorialHow to use Claude in Excel for accounting: Revenue model validationHow to use Claude in Excel for accounting: Revenue model validationHow to use Claude in Excel for accounting: Revenue model validationTutorialTutorialTutorialPrompting strategies for financial analysisPrompting strategies for financial analysisPrompting strategies for financial analysisTutorialTutorialTutorialClaude for financial services overviewClaude for financial services overviewClaude for financial services overviewTutorialTutorialTutorial
@container (width < 52em) {
.footer_layout {
display: flex;
column-gap: var(--_spacing---space--4rem);
row-gap: var(--_spacing---space--4rem);
}
.footer_content_wrap.u-column-custom {
display: contents;
}
}
.footer_link {
opacity: 1;
transition: opacity 0.3s ease;
}
.footer_links_list:has(.footer_link:hover) .footer_link:not(:hover) {
opacity: 0.4;
}
HomepageHomepageNextNextThank you! Your submission has been received!Oops! Something went wrong while submitting the form.
(function () {
const ROOT_SEL = "[data-prompt-scope]";
const TRIGGER_SEL = "[data-prompt-trigger]";
const MENU_ATTR = "data-prompt-menu";
const CLOSE_SEL = "[data-prompt-menu-close]";
const ACTION_SEL = "a, button, [data-prompt-menu-action]";
const ITEM_SEL = "[data-prompt-item], li, .menu-item, .w-dyn-item";
// ---------- Claude helper ----------
function buildClaudeUrl(text) {
const url = new URL("https://claude.ai/new");
url.searchParams.set("q", text || "");
return url.toString();
}
function openClaude(text) {
const q = (text || "").trim();
if (!q) return;
window.open(buildClaudeUrl(q), "_blank", "noopener");
}
// ---------- Utilities ----------
let uid = 0;
function makeId(prefix = "prompt-menu") {
uid += 1;
return `${prefix}-${Date.now().toString(36)}-${uid}`;
}
// Limit queries to elements that belong to THIS scope (ignore nested scopes)
function qsaInScope(root, sel) {
return Array.from(root.querySelectorAll(sel)).filter(
(el) => el.closest(ROOT_SEL) === root
);
}
// Lightweight shield to stop click-through during the brief close animation
function deployClickShield(ms = 300) {
const sh = document.createElement("div");
sh.style.cssText =
"position:fixed;inset:0;z-index:2147483647;pointer-events:auto;background:transparent";
document.body.appendChild(sh);
setTimeout(() => {
sh.remove();
}, ms);
}
// Pairing: find which menu a trigger controls (no manual ids needed)
function resolveMenuForTrigger(root, trigger) {
// 1) explicit data-prompt-trigger="x" -> [data-prompt-menu="x"]
const explicit = trigger.getAttribute("data-prompt-trigger");
if (explicit) {
const m = qsaInScope(root, `[${MENU_ATTR}="${explicit}"]`)[0];
if (m) return m;
}
// 2) aria-controls
const ctrl = trigger.getAttribute("aria-controls");
if (ctrl) {
const m = qsaInScope(root, `#${ctrl.replace(/(["'\\])/g, "\\$1")}`)[0];
if (m) return m;
}
// 3) nearest following sibling with [data-prompt-menu]
let sib = trigger.nextElementSibling;
while (sib && sib !== root) {
if (
sib.hasAttribute &&
sib.hasAttribute(MENU_ATTR) &&
sib.closest(ROOT_SEL) === root
)
return sib;
sib = sib.nextElementSibling;
}
// 4) first menu in this root
return qsaInScope(root, `[${MENU_ATTR}]`)[0] || null;
}
function ensurePairing(trigger, menu) {
if (!menu.id) menu.id = makeId();
trigger.setAttribute("aria-controls", menu.id);
if (trigger.tagName === "BUTTON" && !trigger.hasAttribute("type"))
trigger.type = "button";
}
// ---------- Animations (GSAP) ----------
function revealMenu(menu) {
return new Promise((resolve) => {
gsap.set(menu, {
visibility: "visible",
pointerEvents: "auto",
willChange: "transform, opacity",
});
gsap.killTweensOf(menu);
gsap.fromTo(
menu,
{ opacity: 0, scale: 0.96 },
{
opacity: 1,
scale: 1,
duration: 0.28,
ease: "power3.out",
clearProps: "willChange",
onComplete: resolve,
}
);
});
}
function hideMenu(menu) {
return new Promise((resolve) => {
gsap.killTweensOf(menu);
gsap.to(menu, {
opacity: 0,
duration: 0.2,
ease: "power2.out",
onComplete: () => {
gsap.set(menu, {
visibility: "hidden",
pointerEvents: "none",
clearProps: "opacity,scale,willChange",
});
resolve();
},
});
});
}
// ---------- Per-scope controller ----------
const stateMap = new WeakMap(); // root -> { openMenuEl, openTrigger, isAnimating }
function getState(root) {
let s = stateMap.get(root);
if (!s) {
s = { openMenuEl: null, openTrigger: null, isAnimating: false };
stateMap.set(root, s);
}
return s;
}
function setTriggersInteractive(root, enabled) {
qsaInScope(root, TRIGGER_SEL).forEach((el) => {
el.style.pointerEvents = enabled ? "auto" : "none";
});
}
// ---------- Button fade animations ----------
function fadeOutButtons(root) {
return new Promise((resolve) => {
const buttons = qsaInScope(root, TRIGGER_SEL);
if (buttons.length === 0) {
resolve();
return;
}
gsap.killTweensOf(buttons);
gsap.to(buttons, {
autoAlpha: 0,
duration: 0.2,
ease: "power2.out",
onComplete: resolve,
});
});
}
function fadeInButtons(root) {
return new Promise((resolve) => {
const buttons = qsaInScope(root, TRIGGER_SEL);
if (buttons.length === 0) {
resolve();
return;
}
gsap.killTweensOf(buttons);
gsap.to(buttons, {
autoAlpha: 1,
duration: 0.2,
ease: "power2.out",
onComplete: resolve,
});
});
}
async function openMenuIn(root, menu, trigger) {
const s = getState(root);
if (s.isAnimating || s.openMenuEl === menu) return;
s.isAnimating = true;
// close any currently open in THIS scope only
if (s.openMenuEl && s.openMenuEl !== menu) {
await hideMenu(s.openMenuEl);
if (s.openTrigger) s.openTrigger.setAttribute("aria-expanded", "false");
}
// Fade out buttons when opening menu
await fadeOutButtons(root);
await revealMenu(menu);
s.openMenuEl = menu;
s.openTrigger = trigger || null;
if (s.openTrigger) s.openTrigger.setAttribute("aria-expanded", "true");
// Disable only this scope's triggers while open
setTriggersInteractive(root, false);
s.isAnimating = false;
}
async function closeMenuIn(root) {
const s = getState(root);
if (!s.openMenuEl || s.isAnimating) return;
s.isAnimating = true;
deployClickShield(280); // prevent click-through during closing
await hideMenu(s.openMenuEl);
if (s.openTrigger) s.openTrigger.setAttribute("aria-expanded", "false");
s.openMenuEl = null;
s.openTrigger = null;
// Re-enable only this scope's triggers
setTriggersInteractive(root, true);
// Fade in buttons when closing menu
await fadeInButtons(root);
s.isAnimating = false;
}
// ---------- Initializer ----------
const initedRoots = new WeakSet();
function initScope(root) {
if (!root || initedRoots.has(root)) return;
initedRoots.add(root);
if (!window.gsap) {
console.warn("GSAP is required for prompt menus.");
return;
}
// Normalize ALL menus in this scope to hidden on init (prevents “open on load” bugs)
qsaInScope(root, `[${MENU_ATTR}]`).forEach((menu) => {
if (menu.dataset.pmMenuInit) return;
menu.dataset.pmMenuInit = "true";
gsap.set(menu, {
visibility: "hidden",
opacity: 0,
scale: 1,
pointerEvents: "none",
});
// Optional close button
const closer = menu.querySelector(CLOSE_SEL);
if (closer) {
if (closer.tagName === "BUTTON" && !closer.hasAttribute("type"))
closer.type = "button";
closer.addEventListener("click", (e) => {
e.preventDefault();
e.stopPropagation();
closeMenuIn(root);
});
}
// Menu item -> Claude
menu.addEventListener("click", (e) => {
const target = e.target.closest(ACTION_SEL);
if (!target || !menu.contains(target)) return;
const container = target.closest(ITEM_SEL) || target;
const hiddenP = container.querySelector("[data-prompt-menu-text]");
if (!hiddenP) return;
e.preventDefault();
e.stopPropagation();
const text = hiddenP.textContent || hiddenP.innerText || "";
openClaude(text);
// close after action
closeMenuIn(root);
});
});
// Bind triggers (auto-wire)
qsaInScope(root, TRIGGER_SEL).forEach((trigger) => {
if (trigger.dataset.pmTrigInit) return;
trigger.dataset.pmTrigInit = "true";
const menu = resolveMenuForTrigger(root, trigger);
if (menu) ensurePairing(trigger, menu);
trigger.setAttribute("aria-expanded", "false");
trigger.addEventListener("click", async (e) => {
e.preventDefault();
const targetMenu = resolveMenuForTrigger(root, trigger);
if (!targetMenu) return;
const s = getState(root);
if (s.openMenuEl === targetMenu) {
await closeMenuIn(root); // toggle close
return;
}
await openMenuIn(root, targetMenu, trigger);
});
});
// Outside click (this scope only)
document.addEventListener("click", (e) => {
const s = getState(root);
if (!s.openMenuEl) return;
const insideMenu = s.openMenuEl.contains(e.target);
const onTrigger =
!!e.target.closest(TRIGGER_SEL) && root.contains(e.target);
if (!insideMenu && !onTrigger) closeMenuIn(root);
});
// ESC (this scope only)
document.addEventListener("keydown", (e) => {
if (e.key === "Escape") closeMenuIn(root);
});
}
// ---------- Boot + observe ----------
function boot(container = document) {
const roots = container.querySelectorAll
? container.querySelectorAll(ROOT_SEL)
: [];
roots.forEach(initScope);
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", () => boot(), {
once: true,
});
} else {
boot();
}
const mo = new MutationObserver((muts) => {
for (const m of muts) {
for (const node of m.addedNodes || []) {
if (node.nodeType !== 1) continue;
if (node.matches && node.matches(ROOT_SEL)) initScope(node);
if (node.querySelectorAll) {
node.querySelectorAll(ROOT_SEL).forEach(initScope);
}
}
}
});
mo.observe(document.documentElement, { childList: true, subtree: true });
})();
(function () {
// ---------- Claude helper ----------
function buildClaudeUrl(text) {
const url = new URL('https://claude.ai/new');
url.searchParams.set('q', text || '');
return url.toString();
}
// ---------- Auto-grow helpers ----------
function sizeTextarea(el) {
// Ensure UA defaults don't force a starting height
el.setAttribute('rows', el.getAttribute('data-min-rows') || '1');
el.style.minHeight = '0px';
el.style.height = 'auto'; // allow shrink
el.style.height = el.scrollHeight + 'px'; // fit content
}
function initAutogrow(root = document) {
root.querySelectorAll('textarea[data-autogrow]').forEach((el) => {
if (el.dataset.autogrowInit) return;
el.dataset.autogrowInit = 'true';
// Respect your existing pattern for default text
const preset = el.getAttribute('data-default-text');
if (preset != null && !el.value) el.value = preset;
// Initial sizing
sizeTextarea(el);
// Resize as you type
el.addEventListener('input', () => sizeTextarea(el));
// In case fonts/styles load late and change line-height
window.addEventListener('load', () => sizeTextarea(el), { once: true });
});
}
// ---------- Claude form initializer ----------
function initClaudeForms(root = document) {
root.querySelectorAll('form[data-claude-form]').forEach((form) => {
if (form.dataset.claudeInit) return;
form.dataset.claudeInit = 'true';
const textarea = form.querySelector('[data-claude-textarea], textarea');
const trigger = form.querySelector('[data-claude-button], button[type="button"], a[data-claude-button]');
if (!textarea || !trigger) {
console.warn('Claude form: missing textarea or trigger in', form);
return;
}
// If the trigger is a <button> but has no type, force "button" so it won't submit
if (trigger.tagName === 'BUTTON' && !trigger.hasAttribute('type')) {
trigger.type = 'button';
}
// Keep <a> from navigating away while still opening Claude
if (trigger.tagName === 'A') {
trigger.addEventListener('click', (e) => e.preventDefault());
}
// Optional: support data-default-text on the textarea
const preset = textarea.getAttribute('data-default-text');
if (preset != null && !textarea.value) textarea.value = preset;
// Click opens Claude; submission is optional
trigger.addEventListener('click', () => {
const text = (textarea.value || '').trim();
if (!text) {
textarea.focus();
return;
}
window.open(buildClaudeUrl(text), '_blank', 'noopener');
const mode = form.getAttribute('data-claude-mode') || 'intercept';
if (mode === 'also') {
// Submit after opening Claude
form.submit();
}
// intercept mode: do nothing (no submit)
});
// (Optional) Keep an <a data-claude-button> href in sync for right-click/open-in-new-tab UX
if (trigger.tagName === 'A') {
const syncHref = () => trigger.setAttribute('href', buildClaudeUrl((textarea.value || '').trim()));
syncHref();
textarea.addEventListener('input', syncHref);
textarea.addEventListener('change', syncHref);
}
});
}
// ---------- Boot ----------
function initAll(root = document) {
initAutogrow(root);
initClaudeForms(root);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => initAll(), { once: true });
} else {
initAll();
}
// Re-init if content is injected later (Webflow CMS / IX / tabs)
const mo = new MutationObserver((muts) => {
for (const m of muts) {
for (const node of m.addedNodes || []) {
if (node.nodeType === 1) initAll(node);
}
}
});
mo.observe(document.documentElement, { childList: true, subtree: true });
})();
.prompt_menu_item {
transition: border-color 0.2s ease, color 0.2s ease;
}
.prompt_menu_item_base, .prompt_menu_item_icon {
transition: opacity 0.2s ease;
}
.prompt_menu_list .prompt_menu_item:first-child {
border-color: transparent;
}
.prompt_menu_item:hover {
border-color: transparent;
color: var(--_theme---foreground-primary);
}
.prompt_menu_item:hover .prompt_menu_item_base {
opacity: 1;
}
.prompt_menu_item:hover .prompt_menu_item_icon {
opacity: 1;
}
.prompt_menu_item:hover + .prompt_menu_item {
border-top-color: transparent;
}
.button_prompt_icon {
transition: color 0.3s ease;
}
.button_prompt_wrap:hover .button_prompt_icon {
color: var(--_button-style---icon-hover);
}
.button_prompt_wrap:focus-within .button_prompt_icon {
color: var(--_button-style---text-hover) !important;
}
.button_prompt_wrap:focus-within {
color: var(--_button-style---text-hover) !important;
}
WriteButton TextButton TextLearnButton TextButton TextCodeButton TextButton TextWriteHelp me develop a unique voice for an audienceHi Claude! Could you help me develop a unique voice for an audience? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Improve my writing styleHi Claude! Could you improve my writing style? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Brainstorm creative ideasHi Claude! Could you brainstorm creative ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!LearnExplain a complex topic simplyHi Claude! Could you explain a complex topic simply? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Help me make sense of these ideasHi Claude! Could you help me make sense of these ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Prepare for an exam or interviewHi Claude! Could you prepare for an exam or interview? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!CodeExplain a programming conceptHi Claude! Could you explain a programming concept? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Look over my code and give me tipsHi Claude! Could you look over my code and give me tips? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Vibe code with meHi Claude! Could you vibe code with me? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!MoreWrite case studiesThis is another testWrite grant proposalsHi Claude! Could you write grant proposals? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to — like Google Drive, web search, etc. — if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational. Please execute the task as soon as you can - an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!Write video scriptsthis is a testAnthropicAnthropic© 2026 Anthropic PBCProductsClaudeClaudeClaudeClaude CodeClaude CodeClaude CodeCoworkCoworkCoworkMax planMax planMax planTeam planTeam planTeam planEnterprise planEnterprise planEnterprise planDownload appDownload appDownload appPricingPricingPricingLog inLog inLog inFeaturesClaude in ChromeClaude in ChromeClaude in ChromeClaude in SlackClaude in SlackClaude in SlackClaude in ExcelClaude in ExcelClaude in ExcelSkillsSkillsSkillsModelsOpusOpusOpusSonnetSonnetSonnetHaikuHaikuHaikuSolutionsAI agentsAI agentsAI agentsCode modernizationCode modernizationCode modernizationCodingCodingCodingCustomer supportCustomer supportCustomer supportEducationEducationEducationFinancial servicesFinancial servicesFinancial servicesGovernmentGovernmentGovernmentHealthcareHealthcareHealthcareLife sciencesLife sciencesLife sciencesNonprofitsNonprofitsNonprofitsClaude Developer PlatformOverviewOverviewOverviewDeveloper docsDeveloper docsDeveloper docsPricingPricingPricingRegional ComplianceRegional ComplianceRegional ComplianceAmazon BedrockAmazon BedrockAmazon BedrockGoogle Cloud’s Vertex AIGoogle Cloud’s Vertex AIGoogle Cloud’s Vertex AIConsole loginConsole loginConsole loginLearnBlogBlogBlogClaude partner networkClaude partner networkClaude partner networkCoursesCoursesCoursesConnectorsConnectorsConnectorsCustomer storiesCustomer storiesCustomer storiesEngineering at AnthropicEngineering at AnthropicEngineering at AnthropicEventsEventsEventsPluginsPluginsPluginsPowered by ClaudePowered by ClaudePowered by ClaudeService partnersService partnersService partnersStartups programStartups programStartups programTutorialsTutorialsTutorialsUse casesUse casesUse casesCompanyAnthropicAnthropicAnthropicCareersCareersCareersEconomic FuturesEconomic FuturesEconomic FuturesResearchResearchResearchNewsNewsNewsResponsible Scaling PolicyResponsible Scaling PolicyResponsible Scaling PolicySecurity and complianceSecurity and complianceSecurity and complianceTransparencyTransparencyTransparencyHelp and securityAvailabilityAvailabilityAvailabilityStatusStatusStatusSupport centerSupport centerSupport centerTerms and policiesPrivacy choices
/* Dialog styling */
dialog#consent-container {
margin: 0;
padding: 8px;
opacity: 0;
transform: translateY(16px);
transition: opacity 0.3s ease-out, transform 0.3s ease-out;
}
dialog#consent-container.show {
opacity: 1;
transform: translateY(0);
}
dialog#consent-container::backdrop {
background: transparent;
}
dialog button span {
display: inline !important;
}
/* Toggle switch styling */
.toggle_switch {
position: relative;
display: inline-block;
width: 36px;
height: 24px;
}
.toggle_switch input {
opacity: 0;
width: 0;
height: 0;
}
.toggle_slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #87867f;
transition: .4s;
border-radius: 24px;
}
.toggle_slider:before {
position: absolute;
content: "";
height: 18px;
width: 18px;
left: 3px;
bottom: 3px;
background-color: white;
transition: .4s;
border-radius: 50%;
}
input:checked + .toggle_slider {
background-color: #d97757;
}
input:checked + .toggle_slider:before {
transform: translateX(12px);
}
input:disabled + .toggle_slider {
cursor: not-allowed;
opacity: 0.5;
}
@media only screen and (max-width: 501px) {
dialog#consent-container {
left: 8px !important;
bottom: 8px !important;
right: 8px !important;
}
#consent-banner {
padding: 24px 16px 16px !important;
}
#simple-options {
grid-template-columns: repeat(3, 1fr) !important;
grid-template-rows: auto auto !important;
}
#customize-btn {
grid-column: span 1 !important;
}
dialog button span {
display: none !important;
}
Cookie settings
We use cookies to deliver and improve our services, analyze site usage, and if you agree, to customize or personalize your experience and market our services to you. You can read our Cookie Policy here.
Customize cookie settings
Reject all cookies
Accept all cookies
Necessary
Enables security and basic functionality.
Required
Analytics
Enables tracking of site performance.
Off
Marketing
Enables ads personalization and tracking.
Off
Save preferences
Privacy policyPrivacy policyPrivacy policyResponsible disclosure policyResponsible disclosure policyResponsible disclosure policyTerms of service: CommercialTerms of service: CommercialTerms of service: CommercialTerms of service: ConsumerTerms of service: ConsumerTerms of service: ConsumerUsage policyUsage policyUsage policyx.comx.comLinkedInLinkedInYouTubeYouTubeInstagramInstagramEnglish (US)
function initDynamicCurrentYear() {
const currentYear = new Date().getFullYear();
const currentYearElements = document.querySelectorAll('[data-current-year]');
currentYearElements.forEach(currentYearElement => {
currentYearElement.textContent = currentYear;
});
}
// Initialize Dynamic Current Year
document.addEventListener('DOMContentLoaded', () => {
initDynamicCurrentYear();
});
gsap.registerPlugin(ScrollTrigger,SplitText,TextPlugin,Flip,Draggable,InertiaPlugin);
document.addEventListener('DOMContentLoaded', function() {
const contentElement = document.querySelector('[data-readtime="content"]');
const minutesElement = document.querySelector('[data-readtime="minutes"]');
if (!contentElement || !minutesElement) return;
const text = contentElement.innerText || contentElement.textContent;
const wordCount = text.trim().split(/\s+/).length;
const wordsPerMinute = 250;
const minutes = Math.round(wordCount / wordsPerMinute);
minutesElement.textContent = minutes || 1; // minimum 1 minute
});
// Hide all empty paragraph tags from the main content RTF
document.querySelectorAll('#tutorial_content p').forEach(p => {
if (p.textContent.trim() === '' || /^[\u200B-\u200D\uFEFF]+$/.test(p.textContent)) {
p.remove();
}
});
×
---
## slack.md
> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.
# Claude Code in Slack
> Delegate coding tasks directly from your Slack workspace
Claude Code in Slack brings the power of Claude Code directly into your Slack workspace. When you mention `@Claude` with a coding task, Claude automatically detects the intent and creates a Claude Code session on the web, allowing you to delegate development work without leaving your team conversations.
This integration is built on the existing Claude for Slack app but adds intelligent routing to Claude Code on the web for coding-related requests.
## Use cases
* **Bug investigation and fixes**: Ask Claude to investigate and fix bugs as soon as they're reported in Slack channels.
* **Quick code reviews and modifications**: Have Claude implement small features or refactor code based on team feedback.
* **Collaborative debugging**: When team discussions provide crucial context (e.g., error reproductions or user reports), Claude can use that information to inform its debugging approach.
* **Parallel task execution**: Kick off coding tasks in Slack while you continue other work, receiving notifications when complete.
## Prerequisites
Before using Claude Code in Slack, ensure you have the following:
| Requirement | Details |
| :--------------------- | :----------------------------------------------------------------------------- |
| Claude Plan | Pro, Max, Team, or Enterprise with Claude Code access (premium seats) |
| Claude Code on the web | Access to [Claude Code on the web](../02-Claude-Code-CLI/claude-code-on-the-web-69d53821d4.md) must be enabled |
| GitHub Account | Connected to Claude Code on the web with at least one repository authenticated |
| Slack Authentication | Your Slack account linked to your Claude account via the Claude app |
## Setting up Claude Code in Slack
<Steps>
<Step title="Install the Claude App in Slack">
A workspace administrator must install the Claude app from the Slack App Marketplace. Visit the [Slack App Marketplace](https://slack.com/marketplace/A08SF47R6P4) and click "Add to Slack" to begin the installation process.
</Step>
<Step title="Connect your Claude account">
After the app is installed, authenticate your individual Claude account:
1. Open the Claude app in Slack by clicking on "Claude" in your Apps section
2. Navigate to the App Home tab
3. Click "Connect" to link your Slack account with your Claude account
4. Complete the authentication flow in your browser
</Step>
<Step title="Configure Claude Code on the web">
Ensure your Claude Code on the web is properly configured:
* Visit [claude.ai/code](https://claude.ai/code) and sign in with the same account you connected to Slack
* Connect your GitHub account if not already connected
* Authenticate at least one repository that you want Claude to work with
</Step>
<Step title="Choose your routing mode">
After connecting your accounts, configure how Claude handles your messages in Slack. Navigate to the Claude App Home in Slack to find the **Routing Mode** setting.
| Mode | Behavior |
| :-------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Code only** | Claude routes all @mentions to Claude Code sessions. Best for teams using Claude in Slack exclusively for development tasks. |
| **Code + Chat** | Claude analyzes each message and intelligently routes between Claude Code (for coding tasks) and Claude Chat (for writing, analysis, and general questions). Best for teams who want a single @Claude entry point for all types of work. |
<Note>
In Code + Chat mode, if Claude routes a message to Chat but you wanted a coding session, you can click "Retry as Code" to create a Claude Code session instead. Similarly, if it's routed to Code but you wanted a Chat session, you can choose that option in that thread.
</Note>
</Step>
</Steps>
## How it works
### Automatic detection
When you mention @Claude in a Slack channel or thread, Claude automatically analyzes your message to determine if it's a coding task. If Claude detects coding intent, it will route your request to Claude Code on the web instead of responding as a regular chat assistant.
You can also explicitly tell Claude to handle a request as a coding task, even if it doesn't automatically detect it.
<Note>
Claude Code in Slack only works in channels (public or private). It does not work in direct messages (DMs).
</Note>
### Context gathering
**From threads**: When you @mention Claude in a thread, it gathers context from all messages in that thread to understand the full conversation.
**From channels**: When mentioned directly in a channel, Claude looks at recent channel messages for relevant context.
This context helps Claude understand the problem, select the appropriate repository, and inform its approach to the task.
<Warning>
When @Claude is invoked in Slack, Claude is given access to the conversation context to better understand your request. Claude may follow directions from other messages in the context, so users should make sure to only use Claude in trusted Slack conversations.
</Warning>
### Session flow
1. **Initiation**: You @mention Claude with a coding request
2. **Detection**: Claude analyzes your message and detects coding intent
3. **Session creation**: A new Claude Code session is created on claude.ai/code
4. **Progress updates**: Claude posts status updates to your Slack thread as work progresses
5. **Completion**: When finished, Claude @mentions you with a summary and action buttons
6. **Review**: Click "View Session" to see the full transcript, or "Create PR" to open a pull request
## User interface elements
### App Home
The App Home tab shows your connection status and allows you to connect or disconnect your Claude account from Slack.
### Message actions
* **View Session**: Opens the full Claude Code session in your browser where you can see all work performed, continue the session, or make additional requests.
* **Create PR**: Creates a pull request directly from the session's changes.
* **Retry as Code**: If Claude initially responds as a chat assistant but you wanted a coding session, click this button to retry the request as a Claude Code task.
* **Change Repo**: Allows you to select a different repository if Claude chose incorrectly.
### Repository selection
Claude automatically selects a repository based on context from your Slack conversation. If multiple repositories could apply, Claude may display a dropdown allowing you to choose the correct one.
## Access and permissions
### User-level access
| Access Type | Requirement |
| :------------------- | :-------------------------------------------------------------- |
| Claude Code Sessions | Each user runs sessions under their own Claude account |
| Usage & Rate Limits | Sessions count against the individual user's plan limits |
| Repository Access | Users can only access repositories they've personally connected |
| Session History | Sessions appear in your Claude Code history on claude.ai/code |
### Workspace admin permissions
Slack workspace administrators control whether the Claude app can be installed in the workspace. Individual users then authenticate with their own Claude accounts to use the integration.
## What's accessible where
**In Slack**: You'll see status updates, completion summaries, and action buttons. The full transcript is preserved and always accessible.
**On the web**: The complete Claude Code session with full conversation history, all code changes, file operations, and the ability to continue the session or create pull requests.
## Best practices
### Writing effective requests
* **Be specific**: Include file names, function names, or error messages when relevant.
* **Provide context**: Mention the repository or project if it's not clear from the conversation.
* **Define success**: Explain what "done" looks like—should Claude write tests? Update documentation? Create a PR?
* **Use threads**: Reply in threads when discussing bugs or features so Claude can gather the full context.
### When to use Slack vs. web
**Use Slack when**: Context already exists in a Slack discussion, you want to kick off a task asynchronously, or you're collaborating with teammates who need visibility.
**Use the web directly when**: You need to upload files, want real-time interaction during development, or are working on longer, more complex tasks.
## Troubleshooting
### Sessions not starting
1. Verify your Claude account is connected in the Claude App Home
2. Check that you have Claude Code on the web access enabled
3. Ensure you have at least one GitHub repository connected to Claude Code
### Repository not showing
1. Connect the repository in Claude Code on the web at [claude.ai/code](https://claude.ai/code)
2. Verify your GitHub permissions for that repository
3. Try disconnecting and reconnecting your GitHub account
### Wrong repository selected
1. Click the "Change Repo" button to select a different repository
2. Include the repository name in your request for more accurate selection
### Authentication errors
1. Disconnect and reconnect your Claude account in the App Home
2. Ensure you're signed into the correct Claude account in your browser
3. Check that your Claude plan includes Claude Code access
### Session expiration
1. Sessions remain accessible in your Claude Code history on the web
2. You can continue or reference past sessions from [claude.ai/code](https://claude.ai/code)
## Current limitations
* **GitHub only**: Currently supports repositories on GitHub.
* **One PR at a time**: Each session can create one pull request.
* **Rate limits apply**: Sessions use your individual Claude plan's rate limits.
* **Web access required**: Users must have Claude Code on the web access; those without it will only get standard Claude chat responses.
## Related resources
<CardGroup>
<Card title="Claude Code on the web" icon="globe" href="/en/claude-code-on-the-web">
Learn more about Claude Code on the web
</Card>
<Card title="Claude for Slack" icon="slack" href="https://claude.com/claude-and-slack">
General Claude for Slack documentation
</Card>
<Card title="Slack App Marketplace" icon="store" href="https://slack.com/marketplace/A08SF47R6P4">
Install the Claude app from the Slack Marketplace
</Card>
<Card title="Claude Help Center" icon="circle-question" href="https://support.claude.com">
Get additional support
</Card>
</CardGroup>
---
## use-connectors-to-extend-claude-s-capabilities.md
4. Use connectors to extend Claude's capabilities
# Use connectors to extend Claude's capabilities
This guide explains how to enable and use connectors with Claude to enhance its capabilities.
Web connectors are available for all users on Claude, Cowork, Claude Desktop, and Claude Mobile (iOS and Android). Desktop extensions are available to all users on Claude Desktop.
## What are connectors?
Connectors let Claude access your apps and services, retrieve your data, and take actions within connected services. For example, you can connect Claude to Linear to create issues, to Slack to send messages, or to Google Drive to search your files. Connectors work across Claude, Claude Desktop, Claude Code, and the API (via the **[MCP Connector](../04-API-Reference/Agents-Tools/agents-and-tools-mcp-connector-2b3ff19436.md)**).
You can find available connectors in the **[Connectors Directory](https://claude.ai/connectors)**, where each connector has a page detailing its use cases, read/write capabilities, and availability. You can also add custom connectors or connect to any service that supports MCP.
## Browse available connectors
You can browse the Connectors Directory on Claude and Claude Desktop. It isn't possible to browse the directory on Claude for iOS or Android at this time.
You can browse the directory from two areas:
**From a chat**
1. Click the "+" button in the lower left corner of your chat, or type "/" to open the menu.
2. Hover over “Connectors.”
3. Select “Manage connectors.”
4. Click the “+” button next to **Connectors**.
5. This opens a **Connectors** modal where you can see available connectors by category or scroll through the complete list.
**From settings**
1. Navigate to **[Customize \> Connectors](http://claude.ai/customize/connectors)**.
2. Click the “+” button next to **Connectors**.
3. Browse available connectors by category or scroll through the complete list.
------------------------------------------------------------------------
## Connect a service to Claude
You can connect Claude to a new service on Claude and Claude Desktop. It isn't possible to add new connectors (custom or from the directory) on Claude for iOS or Android at this time.
To connect a service from the directory:
1. Click on the connector you want to add.
2. Review the connector's description and capabilities.
3. Click “Connect” or “Install” to begin the setup process.
4. Follow the authentication prompts to grant Claude access to your account.
5. Configure any specific settings or permissions as needed.
**Important:** When connecting to a service, you're granting Claude permission to access and potentially modify data within that service based on your account permissions. Only connect services you trust and need for your workflows.
## Connect a service on Team and Enterprise plans
Before members of Team and Enterprise plans can use connectors, an Owner or Primary Owner needs to enable them for the organization:
1. Navigate to **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
2. Click “Browse connectors” at the bottom of the page.
3. Select the connector from the list and click “Add to your team.”
4. Individual users can then authenticate with the connector to start using it with Claude.
Once enabled at the org level, individual users follow the same steps described above to connect and authenticate.
------------------------------------------------------------------------
## Use connected services
Once you connect to a service on Claude or Claude Desktop, it will be available to use the next time you log in to your account on Claude for iOS or Android.
Once connected, services become available in your conversations:
1. Click the “+” button in the lower left of the chat interface (you can also type “/” to open this menu).
2. Hover over “Connectors” to open the menu.
3. Enable the specific services you want Claude to use for that conversation by toggling them on.
4. Claude will now be able to use these services when relevant to your requests.
For example, after connecting Linear, you can ask Claude to "Create a new issue for the login bug" and Claude will use Linear to create the issue in your workspace.
Some connectors are interactive and can render live interfaces — like dashboards, task boards, and design tools — directly within your conversation. Look for the **Interactive** badge in the Connectors Directory to find connectors with this capability.
------------------------------------------------------------------------
## Choose how connectors load in your conversation
When you add many connectors, Claude gives you control over how they load. You can find the **Tool access** setting by clicking the “+” button in the lower left corner of your chat, or typing “/” to open the menu. Hover over “Connectors,” then “Tool access” to choose your preferred mode. For most users, **Auto** (the default) works well. If you have 10 or more connectors active, consider switching to **On demand** to give your conversations more room.
Learn more about tool access modes: **[Manage Claude's tool access](../22-Safety-Policy/manage-claude-s-tool-access.md)**.
------------------------------------------------------------------------
## Manage your connectors
To manage your connected services:
1. Navigate to **[Customize \> Connectors](http://claude.ai/customize/connectors)**.
2. View all your connected services in the **Connectors** section.
3. For each service, you can disconnect it, modify connection settings, or review permissions and access levels.
------------------------------------------------------------------------
## Custom connectors
Custom connectors using remote MCP are available on Claude, Cowork, and Claude Desktop for users on free, Pro, Max, Team, and Enterprise plans. Free users are limited to one custom connector. This feature is currently in beta.
In addition to directory connectors, you can add custom connectors:
1. Navigate to **[Customize \> Connectors](http://claude.ai/customize/connectors)**.
2. Click the “+” button next to **Connectors**.
3. Select “Add custom connector.”
4. Enter the connector's name and URL.
5. Enter advanced settings (OAuth Client ID and secret) if desired.
6. Click “Add,” then follow the same connection process as directory connectors.
**Important:** Custom connectors allow you to connect Claude to services that haven't been verified by Anthropic. Only connect to servers from trusted organizations and review authentication permissions carefully.
For more information, see **[Get started with custom connectors using remote MCP](get-started-with-custom-connectors-using-remote-mcp.md)**.
------------------------------------------------------------------------
## Security and privacy
All data transfers are encrypted. When using connectors, you can only sync content to Claude that you have permission to view in the original source.
When connecting to services from the directory, review what access the service is requesting during the connection process. Disconnect services you no longer need or use.
**For Team and Enterprise plans:**
- Access permissions are enforced at the user level. Users need to authenticate with the third-party service when first using the connector, even after an Owner or Primary Owner enables it.
- Connectors are only available in private projects.
- Chats with synced content can't be shared.
------------------------------------------------------------------------
## Troubleshoot connection issues
If you're having trouble connecting to a service, try these steps: check that you have a stable internet connection, verify you have an active account with the connector, review any permissions or account type requirements, and if authentication fails, try disconnecting and reconnecting.
---
## use-google-workspace-connectors.md
# Use Google Workspace connectors
Connect your Gmail, Google Calendar, and Google Drive to Claude so you can search emails, manage your calendar, work with documents, and save files—all without leaving the conversation.
Google Workspace connectors (Gmail, Google Calendar, and Google Drive) are available for all users on Claude and Claude Desktop.
For Team and Enterprise plans, an Owner or Primary Owner must enable these connectors at the organization level before individual users can authenticate. For setup instructions, read **[Use connectors to extend Claude's capabilities](use-connectors-to-extend-claude-s-capabilities.md#h_17dd443beb)**.
## What you can do
### Gmail
- **Search and read emails** using natural language queries
- **Draft emails** with proper formatting and context — Claude creates drafts in your Gmail account, but cannot send emails on your behalf
- **Access email metadata**, including attachment metadata (not attachment content)
- **Manage email organization** with labels and threads
- **List saved drafts** in your Gmail account
### Google Calendar
- **View events and calendars**, including shared calendars you have access to
- **Create, update, and delete events** with full customization
- **Find mutual availability** across attendees
- **Manage attendee lists** and respond to invitations (accept, decline, or tentative)
- **Set up recurring meetings**
### Google Drive
- **Search and retrieve Google Docs** from your Drive
- **Add Google Docs directly to chats and projects** by pasting URLs or selecting from recent documents
- **View file permissions** and **list recent changes** to your Drive
- **Save Claude-generated files** directly to your Drive (requires **[code execution and file creation](https://support.claude.com/en/articles/12111783-create-and-edit-files-with-claude#h_1c99382190)** to be enabled)
**Note:** Claude extracts text content only from Google Drive files. Images embedded in documents are not processed.
------------------------------------------------------------------------
## How to use the connectors
Ask Claude a question that requires access to your Gmail, Calendar, or Drive. Claude automatically detects which tools it needs and uses them to respond. Each action Claude takes on your behalf requires your explicit approval.
Claude's response includes citations indicating which emails, calendar events, or documents were used as sources, with links to the originals when available. You can ask follow-up questions to dig deeper into any source.
### Add Google Drive files to chats
1. Click the plus sign in the chat interface.
2. Select “Add from Google Drive.”
3. Search through your recently accessed documents or paste the document's URL.
4. When you send your message, Claude accesses and processes the document to inform its response.
You can add multiple files to a single chat to give Claude comprehensive context. The files must fit within the conversation's context window.
### Add Google Drive files to projects
The Google Drive connector is only available when adding to **Files** in private projects. This option will be disabled for shared projects.
1. Open your project and find the **Files** section.
2. Click the “+” button to add files.
3. Select “Drive.”
4. Search through your recently accessed documents or paste the document's URL.
5. Your document is added to your project knowledge for Claude to access when chatting in that project.
Google Docs added to chats and projects sync directly from Google Drive, so you're always working with the latest version.
### Managing individual connectors
You can enable or disable specific connectors from below the chat interface:
1. Click the plus sign in the chat interface.
2. Hover over “Connectors.”
3. Toggle individual connectors on or off.
------------------------------------------------------------------------
## Google Drive Cataloging (Enterprise)
Google Drive Cataloging is only available for Enterprise plans.
Enterprise users can enable Google Drive Cataloging to index their Drive content with RAG (Retrieval Augmented Generation). When enabled, Claude indexes your Google Drive documents to provide more accurate, contextual responses with direct citations to relevant sources — and reduces token usage by pulling only relevant content into your context.
If cataloging is turned off, Claude uses the Google APIs to search through your Drive data directly.
### Supported file types for cataloging
Google Docs (text extraction only, up to 10MB).
### Enable Google Drive Cataloging
**For admins:**
1. Navigate to **[Organization settings \> Capabilities](https://claude.ai/admin-settings/capabilities)**.
2. Locate **Google Drive cataloging** under **Data sources**.
3. Toggle this on and follow the instructions to authenticate.
**For individual users** (after an admin enables the feature):
1. Click the plus sign in the chat interface.
2. Toggle **Drive search** on.
If this is your first time using this feature, you'll be redirected to Google to authenticate.
### How cataloging works
Once enabled, Claude indexes your Google Docs and uses that index during conversations to provide relevant context and citations. Claude periodically re-indexes documents that have changed and de-indexes documents that have been deleted. It may take several hours for Claude to recognize updates or deletions.
### Cataloging data retention
- Indexed data for a deleted file is removed within one hour of the file being deleted.
- When an admin turns off cataloging, all indexed data for the organization is deleted within six hours.
------------------------------------------------------------------------
## Privacy and data handling
- You must authenticate directly with your Google account before using these connectors.
- On Team and Enterprise plans, an Owner or Primary Owner must enable connectors at the account level before individual users can authenticate.
- Claude can only access the Gmail, Calendar, and Drive data for the Google account you've connected.
- Claude only accesses your data when you explicitly ask a question or request an action requiring this information, and retrieves the minimum information needed.
- Claude mirrors your existing permissions — you cannot access information you don't already have access to in Google Workspace.
- Data retrieved while using connectors is stored on Anthropic servers, protected by Anthropic's security infrastructure (see our **[Trust Center](https://trust.anthropic.com/controls#organizational-security)** for details). This data is retained with its associated chat, so you can delete any retrieved data by deleting the chat.
- We do not train our models on your Gmail or Calendar connector data, ensuring your private information remains private.
- **Note**: If you are using our consumer products (e.g. Claude Free, Pro, and Max ( when using Claude Code with those accounts) and you have chosen to allow us to use your chats and coding sessions for model training, then any content you copy/paste from your Gmail or Calendar or Claude's responses which include specific information from these connectors may be used to improve our models. For more information, refer to **[Is my data used for model training?](https://privacy.claude.com/en/articles/10023580-is-my-data-used-for-model-training)**
- Each user's Google Drive Cataloging index is private — no other users can access it, even within the same organization. Each index is unique to a user/organization pair, and fully respects your underlying access controls and permissions.
- Data is encrypted at rest and in transit.
### A note on Gmail permissions
During authentication, Google's OAuth screen mentions email sending permissions. Claude only reads emails and creates drafts with your explicit approval. The send function is not enabled — all emails must be sent manually through your Gmail account.
------------------------------------------------------------------------
## Current limitations
- Attachment content is not directly accessible through Gmail (metadata only).
- Claude cannot see images embedded in documents, emails, or presentations.
- Some advanced Gmail filters may not be supported.
- Complex queries may require multiple API calls.
- Rate limits apply per Google's API quotas.
- Performance may vary for large mailboxes.
------------------------------------------------------------------------
## Troubleshooting
### Reconnecting your Google account
If you see the error "*Please try again. You may need to reconnect with your Google Drive account,"* follow these steps:
1. Navigate to **[Customize \> Connectors](https://claude.ai/customize/connectors)**.
2. Find your Google connector and click on it to view the details.
3. Click the “Disconnect” button.
4. Click “Disconnect” in the confirmation message.
5. The next time you use a Google Workspace feature in your chat, you'll be redirected to Google to re-authenticate.
If you're still having trouble, disconnect from your Google account settings at [**myaccount.google.com/connections**](https://myaccount.google.com/connections). Search for the Claude connection, click into the settings, and choose “Delete all connections.”
### Google Workspace admin configuration
If your organization uses Google Workspace and the connectors aren’t working (you may see the message *“Access blocked: your institution's admin needs to review Claude for Google Drive"*), your Google Workspace admin may need to allow Claude as a trusted application:
1. Go to **[admin.google.com](https://admin.google.com)**
2. Navigate to **Security \> Access and data control \> API controls \> Manage third-party app access**.
3. Click “Add app,” then select “OAuth App Name.”
4. Search for “Claude” and set it as “Trusted.”
5. Wait approximately 15 minutes for Google's policy to propagate, then try connecting again.
------------------------------------------------------------------------
## Frequently asked questions
### What happens if I update a Google Doc after adding it to a chat?
The document continues to sync with the most up-to-date version in Google Drive.
### Can I add multiple files to a single chat?
Yes. You can add multiple Google Drive files to provide Claude with comprehensive context. The documents must fit within the conversation's context window.
### What happens if I lose access to a document?
You won't be able to view its contents in conversations where it was previously added. The document preview is removed, but the conversation history is maintained.
### Does Claude have access to images, comments, or suggestions in Google Docs?
No. Claude extracts the main text content only and cannot see images, comments, or suggestions.
### Can Claude send emails on my behalf?
No. Claude can create email drafts, but all emails must be sent manually through your Gmail account.
### Can I opt out of using these connectors?
On Team and Enterprise plans, Owners and Primary Owners can disable Google Workspace connectors for their organization in **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**. Individual users can also disable specific tools from the chat interface.
### Who has access to my Google Drive Cataloging index?
Only you. Your index includes only documents you have access to, and no one else can access it—even members of the same organization. If you disconnect your Google account from Claude, your index is deleted.
---
## using-claude-in-slack.md
# Using Claude in Slack
Claude in Slack gives you AI assistance right where your team collaborates. This article covers how to interact with Claude in Slack, which features are available, and tips for getting the most out of the integration.
## Send a direct message to Claude
1. Search for "@Claude" anywhere in Slack.
2. Click on Claude, then the "Chat" tab at the top to open a direct message.
3. You'll see a welcome message with suggested prompts.
4. Type your question or request and press Enter.
## Use the AI assistant panel
1. Click the Claude icon in the AI assistant header (if available in your workspace).
2. The Claude panel will open on the right side of your Slack window.
3. Type your message and press Enter.
4. Claude will respond in the panel.
5. When you close the AI assistant panel, the conversation moves to your history.
6. Access previous conversations by clicking the clock icon.
## Mention @Claude in a thread or channel
1. Mention @Claude in any thread or channel where you want Claude's help.
2. Claude will draft a response based on the recent conversation context.
3. You'll see the draft privately first.
4. Review, edit, or regenerate the response before deciding to share it.
5. Click "Post to thread" to share Claude's response with your team.
This gives you control to review what Claude shares before it becomes visible to others.
### What context from the thread or channel is included when using @Claude?
When mentioned in a channel, Claude will have access to the last 20 messages in that channel, including any files shared within those messages. When using @Claude in a thread, it will have access to the last 50 messages in that thread.
## Forward a thread directly to Claude
You can also select “Forward message…” on a message within any Slack thread to send it directly to Claude. When shared in this way, Claude will have access to the last 100 messages in the thread.
## Route coding tasks to Claude Code (beta)
**Note:** This feature is currently available in beta as a research preview for Team and Enterprise plan users who have access to Claude Code on the web.
You can delegate coding tasks to Claude Code directly from Slack. When you mention @Claude for a coding-related request, Claude automatically detects the coding intent and spins up a Claude Code session on the web using context from your Slack conversation.
### How it works
1. Mention @Claude in a channel or thread with a coding task.
2. Claude reviews your message to determine if it's a coding request.
3. If it is, Claude gathers context from recent messages and creates a new Claude Code session.
4. Claude posts status updates back to your Slack thread as the session progresses.
5. Once complete, Claude provides a link to the full session where you can review changes and open a pull request.
You can also manually tell Claude to handle a request as a coding task if it isn't automatically detected.
### Use cases for Claude Code in Slack
- **Bug investigation and fixes**: Ask Claude to investigate and fix bugs as soon as they're reported in Slack.
- **Quick code reviews and modifications**: Have Claude implement small features or refactor code based on team feedback.
- **Collaborative debugging**: When team discussion provides crucial context—like error reproductions or user reports—Claude uses that information to inform its debugging approach.
### Requirements
To use Claude Code in Slack:
- The Claude app must be installed in your Slack workspace via the [Slack App Marketplace](https://slack.com/marketplace/A08SF47R6P4).
- A Claude Owner or Primary Owner must enable Claude Code on the web by navigating to [Admin settings \> Claude Code](http://claude.ai/admin-settings/claude-code).
- You must have access to Claude Code on the web.
Claude automatically chooses which repository to run the task on based on the repositories you've authenticated to Claude Code on the web.
------------------------------------------------------------------------
## Features and capabilities
### Available features
Claude in Slack supports many of the capabilities offered by the Claude web app, including:
- **Web search**: Get up-to-date information from the internet.
- **Integrations**: Access connected services like Google Docs, Gmail, and Google Calendar.
- **File uploads**: Attach files directly in your Slack conversation for Claude to analyze.
- **Document analysis**: Upload PDFs, text files, images, and more.
### How integrations work
If you've connected integrations in Claude (like Google Workspace), they work in Slack too:
1. Share a Google Doc link in your message to Claude.
2. Claude will automatically access and analyze the document based on your permissions.
3. You can reference emails from Gmail or events from Google Calendar the same way.
You cannot manage or connect new integrations from within Slack—set these up in your Claude settings first.
### Feature limitations
The following features are not available when using Claude in Slack:
- Research
- Extended thinking
- Creating new integration connections (you can only use integrations you’ve already connected in your Claude settings)
------------------------------------------------------------------------
## Using integrations across multiple Slack workspaces
If you use Claude across more than one Slack workspace, it's important to understand that your integrations (like the Slack connector) are tied to your **Claude account**, not to a specific Slack workspace.\
\
**To avoid unexpected results:**
- Disconnect the Slack connector from your Claude account before using Claude in a different workspace (**Settings \> Connectors \> Slack \> Disconnect**), then reconnect it when needed.
- If you regularly use Claude in simultaneous workspaces, consider using separate Claude accounts, each configured for its respective workspace.
------------------------------------------------------------------------
## Common use cases
### Code assistance
Share code snippets with Claude to get implementation suggestions, or help debugging errors, optimizing functions, and understanding legacy code. For more complex coding tasks, Claude can automatically route your request to Claude Code on the web (see **[Route coding tasks to Claude Code](#h_adda66b697)**).
### Content creation
Transform team discussions into formalized documentation, draft emails and proposals in your direct message with Claude, then share the results in relevant Slack channels.
### Document analysis
Upload files directly to Claude for data analysis, key point extraction/summarization, and translation. Supported file types include: PDF, TXT, DOC, DOCX, images (PNG, JPG), CSV, and more. For more information, see **[Uploading files to Claude](../15-Claude-AI-Features/uploading-files-to-claude.md)**.
### Meeting preparation
Before joining a call, ask Claude to summarize key topics from shared documents, analyze relevant files, review meeting agendas, and prepare talking points.
### Onboarding support
Granting new team members access to channel history and shared documents in Slack helps them ramp up faster.
### Quick research
Get instant answers during team discussions. Ask Claude about industry trends, technical concepts, or company information while staying in your conversation.
------------------------------------------------------------------------
## Best practices
### Optimize your workflow
- **Keep Claude DMs organized**: Use them for draft work before sharing in channels.
- **Leverage context**: Claude maintains conversation context within each session.
- **Use clear prompts**: Be specific about what you need to get the best results.
- **Request web search**: Add "search the web" to your prompt when you need current information.
### Managing conversations
- Each Claude DM maintains full chat history.
- In the AI assistant panel, conversations move to history when you close the panel.
- Start fresh conversations when switching topics for better results.
### File handling
- Upload files directly in your Slack message to Claude.
- Claude processes files using the same system as the Claude web app.
- You can upload multiple files in a single message.
## Message editing and deletion
- **Editing messages**: Claude won't see edits to previous messages.
- **Deleting messages**: Deleted messages remain in Claude's context but are removed from the Slack interface.
- **Threading**: Threading is disabled in Claude DMs to maintain conversation flow.
## Channel restrictions
Claude works in direct messages and threads where you explicitly mention @Claude. You control when Claude participates in conversations and can review all responses before sharing them with your team.
------------------------------------------------------------------------
## Troubleshooting
### "Usage limit reached"
This message appears when you've hit your Claude account usage limits. Try again later or consider **[upgrading your Claude plan](https://claude.ai/upgrade)**.
### "I'm unable to generate a response at this time"
This generic error message can appear for various reasons:
- API failures or temporary service issues
- Empty responses from Claude
- Network connectivity problems
Try sending your message again. If the problem persists, you can **[contact our Support team](https://support.claude.com/en/articles/9015913-how-to-get-support)**.
### "I don't have access to our previous conversation history"
This message appears when you try to continue a conversation in Slack that has already been deleted from Claude. This can happen if:
- You disconnected your Claude in Slack app.
- Your organization’s retention policy deleted the conversation.
- You manually deleted the conversation from the Claude web app.
Start a new conversation to continue.
---
## using-interactive-connectors-in-claude.md
4. Using interactive connectors in Claude
# Using interactive connectors in Claude
Interactive connectors are available for all users on Claude, Cowork, and Claude Desktop.
## What are interactive connectors?
Some connectors can now display live, interactive apps directly within your Claude conversations. Instead of returning text-only responses, these connectors render interfaces — like analytics dashboards, task boards, or design tools — that you can interact with without leaving the chat.
For example, you might ask Claude about your project status, and instead of just describing it, Claude opens your Asana board right in the conversation. You can check off tasks, update statuses, and keep chatting with Claude — all in one place.
Claude can also generate its own custom visuals—diagrams, charts, and simple interactive elements built from scratch for your question. When a connected service offers an interactive interface that handles your request, like an MCP app, Claude will use it. Custom visuals fill the gaps when no connector interface fits what you’re asking for.
For more on Claude-generated visuals, see **[Custom visuals in chat](../15-Claude-AI-Features/custom-visuals-in-chat.md)**.
------------------------------------------------------------------------
## How interactive connectors appear
Interactive connectors display in two ways:
**Inline cards** are compact components embedded directly in the conversation. They're ideal for quick summaries, confirmations, and single actions — like a status update or a message draft ready to send.
**Fullscreen view** provides an immersive interface for complex interactions like data visualizations, document editing, or detailed project views. The conversation input remains available so you can continue talking to Claude while interacting with the connector.
## Interact with connectors
You can interact directly with elements inside the connector:
- Filter, sort, or drill into data
- Toggle settings, check boxes, or make selections
- Confirm and execute actions (mark complete, send, save)
- Expand and collapse content sections
If you need to ask Claude to modify something, refine a result, or navigate to a different context, type in the conversation input — Claude can interpret your request and update the interface accordingly.
## Which connectors are interactive?
In the **[Connectors Directory](https://claude.ai/directory)**, connectors with this capability are marked with an "Interactive” badge. Current interactive connectors include:
- **Amplitude** — View and interact with analytics dashboards
- **Asana** — Manage tasks and project boards
- **Box** — Work with documents and files
- **Canva** — Create and edit designs
- **Clay** — Manage contacts and outreach
- **Figma** — Review and annotate designs
- **Hex** — Explore data and notebooks
- **Slack** — Draft and send messages
We’re adding support for more interactive connectors over time.
## Get started with interactive connectors
1. Navigate to the **[Connectors Directory](https://claude.ai/directory)**.
2. Look for connectors marked with the "Interactive" badge.
3. Connect and authenticate with the connector.
4. Start a conversation with Claude and ask about something the connector handles — the interactive elements will appear automatically when relevant.
**Note:** Interactive connectors are default on when you have the relevant connector enabled. No additional setup is needed.
## Considerations for Team and Enterprise plans
### Can Team and Enterprise owners control interactive connectors separately from standard connectors?
Yes. Team and Enterprise owners can disable the specific tool calls that render interactive connectors within **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**. This does not disable the connector itself — text-based tool functionality continues to work normally.
## Permissions and security
### How are interactive connectors secured?
Interactive connectors run in sandboxed iframes with strict Content Security Policies. All communication between the interface and Claude uses auditable JSON-RPC messaging. Servers must predeclare which external domains they need, and the host can review HTML content before rendering.
### Do interactive connectors require additional permissions beyond the connector itself?
No. Interactive connectors use the same permissions you granted when connecting the tool. They don't request additional access to your data.
### Can interactive connectors make purchases or financial transactions?
No. Purchases through third-party interactive connectors are not supported.
## Troubleshooting
### The interface isn't appearing
- Confirm you're using Claude web or Claude Desktop (not mobile).
- Check that the connector is connected and enabled for your current conversation.
- Try starting a new conversation and asking Claude a question that the connector handles.
### The connector isn't responding to interactions
- Check your internet connection.
- Try refreshing the page or restarting Claude Desktop.
- If the issue persists, disconnect and reconnect the connector in **[Settings \> Connectors](https://claude.ai/settings/connectors)**.
### I want to disable interactive connectors
- **Team and Enterprise users:** Ask your organization owner to disable the relevant tool calls in **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**.
- **Individual users:** You can disable specific connector tools via the "Search and tools" menu in your conversation.
## I'm a developer. Where can I learn about building MCP Apps?
MCP Apps is the open-source extension to the Model Context Protocol that powers interactive apps. If you are building your own interactive connector, note that it must meet additional design, security, and testing requirements. See the **[Remote MCP Server Submission Guide](../06-MCP-Tools/General/remote-mcp-server-submission-guide-claude-help-center.md)** for details.
---
## using-research-and-google-workspace.md
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
[](#)
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
- Meet Claude
Products
- [](/product/overview)
Claude
- [](/product/claude-code)
Claude Code
- [](/product/cowork)
Claude Cowork
Features
- [](/claude-for-chrome)
Claude for Chrome
- [](/claude-for-slack)
Claude for Slack
- [](/claude-for-excel)
Claude for Excel
- [](/claude-for-powerpoint)
Claude for PowerPoint
- [](/skills)
Skills
Models
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
1. Tutorials
[](/resources/tutorials)
Tutorials
/
2.
Using Research and Google Workspace
Explore here
- [](#)
Ask questions about this page
- [](#)
Copy as markdown
# Using Research and Google Workspace
Learn how to leverage Claude's Research capabilities alongside Google Workspace integrations to access emails, calendar data, documents, and web information for comprehensive analysis.
-
Category
Professional
-
Product
Claude.ai
-
Reading time
Watch time
5
min
4
min
-
Share
[Copy link](#)
https://claude.com/resources/tutorials/using-research-and-google-workspace
## Related tutorials
[Choosing the right Claude model: Haiku, Sonnet, and Opus](/resources/tutorials/choosing-the-right-claude-model)
Choosing the right Claude model: Haiku, Sonnet, and Opus
Choosing the right Claude model: Haiku, Sonnet, and Opus
Tutorial
[Tutorial](/resources/tutorials/choosing-the-right-claude-model)
Tutorial
[Claude Enterprise Administrator Guide](/resources/tutorials/claude-enterprise-administrator-guide)
Claude Enterprise Administrator Guide
Claude Enterprise Administrator Guide
Tutorial
[Tutorial](/resources/tutorials/claude-enterprise-administrator-guide)
Tutorial
[How to customize plugins in Cowork](/resources/tutorials/how-to-customize-plugins-in-cowork)
How to customize plugins in Cowork
How to customize plugins in Cowork
Tutorial
[Tutorial](/resources/tutorials/how-to-customize-plugins-in-cowork)
Tutorial
[How to build a plugin from scratch in Cowork](/resources/tutorials/how-to-build-a-plugin-from-scratch-in-cowork)
How to build a plugin from scratch in Cowork
How to build a plugin from scratch in Cowork
Tutorial
[Tutorial](/resources/tutorials/how-to-build-a-plugin-from-scratch-in-cowork)
Tutorial
[Homepage](https://claude.com)
Homepage
[Next](#)
Next
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Write
[Button Text](#)
Button Text
Learn
[Button Text](#)
Button Text
Code
[Button Text](#)
Button Text
Write
- Help me develop a unique voice for an audience
[](#)
Hi Claude! Could you help me develop a unique voice for an audience? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Improve my writing style
[](#)
Hi Claude! Could you improve my writing style? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Brainstorm creative ideas
[](#)
Hi Claude! Could you brainstorm creative ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Learn
- Explain a complex topic simply
[](#)
Hi Claude! Could you explain a complex topic simply? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Help me make sense of these ideas
[](#)
Hi Claude! Could you help me make sense of these ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Prepare for an exam or interview
[](#)
Hi Claude! Could you prepare for an exam or interview? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Code
- Explain a programming concept
[](#)
Hi Claude! Could you explain a programming concept? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Look over my code and give me tips
[](#)
Hi Claude! Could you look over my code and give me tips? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Vibe code with me
[](#)
Hi Claude! Could you vibe code with me? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
More
- Write case studies
[](#)
This is another test
- Write grant proposals
[](#)
Hi Claude! Could you write grant proposals? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to — like Google Drive, web search, etc. — if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can - an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Write video scripts
[](#)
this is a test
[Anthropic](https://www.anthropic.com/)
Anthropic
© \[year\] Anthropic PBC
Products
- Claude
[Claude](/product/overview)
Claude
- Claude Code
[Claude Code](/product/claude-code)
Claude Code
- Claude Code for Enterprise
[Claude Code for Enterprise](/product/claude-code/enterprise)
Claude Code for Enterprise
- Claude Cowork
[Claude Cowork](/product/cowork)
Claude Cowork
- Max plan
[Max plan](/pricing/max)
Max plan
- Team plan
[Team plan](/pricing/team)
Team plan
- Enterprise plan
[Enterprise plan](/pricing/enterprise)
Enterprise plan
- Download app
[Download app](/download)
Download app
- Pricing
[Pricing](/pricing)
Pricing
- Log in
[Log in](https://claude.ai/login)
Log in
Features
- Claude for Chrome
[Claude for Chrome](/claude-for-chrome)
Claude for Chrome
- Claude for Slack
[Claude for Slack](/claude-for-slack)
Claude for Slack
- Claude for Excel
[Claude for Excel](/claude-for-excel)
Claude for Excel
- Claude for PowerPoint
[Claude for PowerPoint](/claude-for-powerpoint)
Claude for PowerPoint
- Skills
[Skills](/skills)
Skills
Models
- Opus
[Opus](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- Sonnet
[Sonnet](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- Haiku
[Haiku](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
Solutions
- AI agents
[AI agents](/solutions/agents)
AI agents
- Claude Code Security
[Claude Code Security](/solutions/claude-code-security)
Claude Code Security
- Code modernization
[Code modernization](/solutions/code-modernization)
Code modernization
- Coding
[Coding](/solutions/coding)
Coding
- Customer support
[Customer support](/solutions/customer-support)
Customer support
- Education
[Education](/solutions/education)
Education
- Financial services
[Financial services](/solutions/financial-services)
Financial services
- Government
[Government](/solutions/government)
Government
- Healthcare
[Healthcare](/solutions/healthcare)
Healthcare
- Life sciences
[Life sciences](/solutions/life-sciences)
Life sciences
- Nonprofits
[Nonprofits](/solutions/nonprofits)
Nonprofits
Claude Platform
- Overview
[Overview](/platform/api)
Overview
- Developer docs
[Developer docs](https://platform.claude.com/docs)
Developer docs
- Pricing
[Pricing](https://claude.com/pricing#api)
Pricing
- Marketplace
[Marketplace](/platform/marketplace)
Marketplace
- Amazon Bedrock
[Amazon Bedrock](/partners/amazon-bedrock)
Amazon Bedrock
- Google Cloud’s Vertex AI
[Google Cloud’s Vertex AI](/partners/google-cloud-vertex-ai)
Google Cloud’s Vertex AI
- Microsoft Foundry
[Microsoft Foundry](/partners/microsoft-foundry)
Microsoft Foundry
- Regional compliance
[Regional compliance](/regional-compliance)
Regional compliance
- Console login
[Console login](../04-API-Reference/Other/platform-claude-com.md)
Console login
Resources
- Blog
[Blog](/blog)
Blog
- Claude partner network
[Claude partner network](/partners)
Claude partner network
- Community
[Community](/community)
Community
- Connectors
[Connectors](/connectors)
Connectors
- Courses
[Courses](https://www.anthropic.com/learn)
Courses
- Customer stories
[Customer stories](/customers)
Customer stories
- Engineering at Anthropic
[Engineering at Anthropic](https://www.anthropic.com/engineering)
Engineering at Anthropic
- Events
[Events](https://www.anthropic.com/events)
Events
- Plugins
[Plugins](/plugins)
Plugins
- Powered by Claude
[Powered by Claude](/partners/powered-by-claude)
Powered by Claude
- Service partners
[Service partners](/partners/services)
Service partners
- Startups program
[Startups program](/programs/startups)
Startups program
- Tutorials
[Tutorials](/resources/tutorials)
Tutorials
- Use cases
[Use cases](/resources/use-cases)
Use cases
Company
- Anthropic
[Anthropic](https://www.anthropic.com/)
Anthropic
- Careers
[Careers](https://www.anthropic.com/careers)
Careers
- Economic Futures
[Economic Futures](https://www.anthropic.com/economic-futures)
Economic Futures
- Research
[Research](https://www.anthropic.com/research)
Research
- News
[News](https://www.anthropic.com/news)
News
- Responsible Scaling Policy
[Responsible Scaling Policy](../19-Reference/announcing-our-updated-responsible-scaling-policy-anthropic.md)
Responsible Scaling Policy
- Security and compliance
[Security and compliance](https://trust.anthropic.com/)
Security and compliance
- Transparency
[Transparency](https://anthropic.com/transparency)
Transparency
Help and security
- Availability
[Availability](https://www.anthropic.com/supported-countries)
Availability
- Status
[Status](https://status.anthropic.com/)
Status
- Support center
[Support center](https://support.claude.com/en/)
Support center
Terms and policies
Privacy choices
### Cookie settings
We use cookies to deliver and improve our services, analyze site usage, and if you agree, to customize or personalize your experience and market our services to you. You can read our Cookie Policy [here](https://www.anthropic.com/legal/cookies).
Customize cookie settings
Reject all cookies
Accept all cookies
###### Necessary
Enables security and basic functionality.
Required
###### Analytics
Enables tracking of site performance.
Off
###### Marketing
Enables ads personalization and tracking.
Off
Save preferences
Privacy policy
[Privacy policy](https://www.anthropic.com/legal/privacy)
Privacy policy
Responsible disclosure policy
[Responsible disclosure policy](https://www.anthropic.com/responsible-disclosure-policy)
Responsible disclosure policy
Terms of service: Commercial
[Terms of service: Commercial](https://www.anthropic.com/legal/commercial-terms)
Terms of service: Commercial
Terms of service: Consumer
[Terms of service: Consumer](https://www.anthropic.com/legal/consumer-terms)
Terms of service: Consumer
Usage policy
[Usage policy](https://www.anthropic.com/legal/aup)
Usage policy
[x.com](https://x.com/claudeai)
x.com
[LinkedIn](https://www.linkedin.com/showcase/claude/)
LinkedIn
[YouTube](https://www.youtube.com/@anthropic-ai)
YouTube
[Instagram](https://www.instagram.com/claudeai)
Instagram
English (US)
[English (US)](/resources/tutorials/using-research-and-google-workspace)
[日本語 (Japan)](/ja-jp)
[Deutsch (Germany)](/de-de)
[Français (France)](/fr-fr)
[한국어 (South Korea)](/ko-kr)
---
## using-the-benchling-connector-in-claude.md
# Search for answers or browse by topic
Search for articles...
Uh oh. That page doesn’t exist.
Try searching for your answer or just send us a message.
---
## using-the-benevity-connector-in-claude.md
3. Using the Benevity Connector in Claude
# Using the Benevity Connector in Claude
The Benevity integration enables you to discover and research charitable causes and nonprofit organizations through natural conversation. This article explains how to set up and use the Benevity Nonprofit connector with Claude to find nonprofits that align with your values.
# An error occurred.
Unable to execute JavaScript.
The Benevity integration relies upon Claude’s ability to use remote connectors.
## What this integration provides
The Benevity integration connects Claude directly to Benevity’s extensive database of charitable organizations. This integration allows you to search for nonprofits, learn about their missions and programs, and access their websites—all through conversation with Claude.
This integration provides access to:
- 2.5M+ nonprofit organizations
- Detailed organization profiles, including mission statements, program descriptions, and geographic focus
- Keyword search to find local and national/international organizations
- Direct website links to learn more and support nonprofits you care about
## Who can access the Benevity integration?
The Benevity integration is available to users with paid Claude plans (Pro, Max, Team, or Enterprise). A Benevity account is not required to use the connector. Authentication or login is not needed—simply connect and start searching.
## Setting up the Benevity integration
### For Organization Owners (Team and Enterprise)
1. Navigate to [Admin settings \> Connectors](https://claude.ai/admin-settings/connectors)
2. Select “Browse connectors”
3. Search and select “Benevity”
4. Select “Add to your team”
### For Individual Claude Users
1. Navigate to Settings \> Connectors
2. Select “Browse connectors”
3. Search and select “Benevity”
4. Follow the instructions to enable the Benevity connector
Learn about [finding and connecting tools](https://support.claude.com/en/articles/11724452-using-the-connectors-directory-to-extend-claude-s-capabilities) in Claude.
## Common use cases
### Discover nonprofits by interest area
Describe the type of nonprofit you want to support and get recommendations for relevant nonprofits.
Example prompts:
I’m passionate about environmental conservation, especially ocean health.
Can you help me find organizations working on marine ecosystem protection?
I’d like to learn about organizations working on mental health support for
veterans. What options are out there?
### Find local charities
Search for nonprofits in your community by location to support local impact.
Example prompts:
I want to volunteer with a food bank in Seattle. Can you help me find
local organizations that address food insecurity?
Our company wants to support education initiatives in Chicago. Can you
find nonprofits focused on youth education in that area?
### Research before donating
Learn comprehensive details about an organization’s mission, programs, and impact before contributing.
Example prompts:
I heard about Ocean Conservancy. Can you tell me more about what they do
and what communities they serve?
Can you compare these three environmental nonprofits and tell me which has
the broadest geographic reach?
### Plan corporate giving
Identify verified nonprofits for workplace giving programs or team volunteering events.
Example prompts:
We’re planning a company volunteer day focused on STEM education. What
organizations in our area could we partner with?
Our team wants to set up a matching gift program. Can you help us find
reputable charities in the housing and homelessness space?
## FAQs
### Is the Benevity integration free to use?
Yes! The integration is free for all Claude Pro users. No Benevity account is required to search and discover nonprofit organizations.
### Can I donate directly through this integration?
No, the integration is designed for discovery and research. To donate or volunteer, you’ll need to visit the nonprofit’s website directly. Claude can provide you with links to the organizations you’re interested in.
### How current is the data?
The integration provides real-time access to Benevity’s database, which includes over 2.5 million nonprofit organizations. Organization profiles are regularly updated to reflect current information.
### Does this work internationally?
Yes, the Benevity database includes nonprofit organizations from around the world. You can search for local charities in your community or explore international organizations working on global issues.
---
## using-the-biorender-connector-in-claude.md
3. Using the BioRender Connector in Claude
# Using the BioRender Connector in Claude
The BioRender integration searches BioRender’s extensive scientific figure template and icon collection for relevant content to create figures faster. This article explains how to set up and use the BioRender integration with Claude to accelerate scientific content creation.
The BioRender integration relies upon Claude's ability to [use remote connectors](../15-Claude-AI-Features/browsing-and-connecting-to-tools-from-the-directory.md).
## What this integration provides
This integration allows you to search BioRender’s extensive library of vetted scientific figures to quickly find scientifically-accurate content for your presentations, posters, grant proposal figures, journal graphical abstracts and more. Simply describe your needs and receive recommended scientific icons, figures and templates in return.
This integration provides access to BioRender’s scientific Icons and Template, which includes:
- 50,000+ verified scientific icons across all fields of life sciences
- Professionally designed figure templates for meetings, presentations, research posters, grant applications, publications, patience material, internal workflows, etc.
- Regularly updated visual assets curated by world class medical illustrators
## Who can access the BioRender integration
- The BioRender integration is available to all BioRender users with an active account.
- Users must log in using their BioRender credentials to authenticate the connection.
- Once connected, they can search BioRender’s scientific icon and template library directly.
- Access to specific icons and templates will depend on the user’s subscription tier:
- Free and Individual Plans - Access to a limited set of icons and templates
- Premium and Team Plans - Access to the full BioRender library, including advanced templates and specialized scientific content
- No additional licensing or set up fees are required to access the BioRender integration
More details on accessing the integration can be found in [BioRender’s MCP Server Documentation](https://help.biorender.com/hc/en-gb/articles/30870978672157-How-to-use-the-BioRender-MCP-connector).
## Setting up the BioRender integration
**For Organization Owners (Team and Enterprise)**
1. Navigate to Admin settings \> Connectors
2. Click "Browse connectors"
3. Click “**BioRender**”
4. Click “Add to your team”
**For Individual Claude Users**
1. Navigate to Settings \> Connectors
2. Click “Connect”
3. Follow the instructions to authenticate with your BioRender account
Learn about [finding and connecting tools](../15-Claude-AI-Features/browsing-and-connecting-to-tools-from-the-directory.md) in Claude.
**For Claude Code Users**
1. Command: `/plugin marketplace add anthropics/life-sciences`
2. Command: `/plugin install biorender@life-sciences`
3. Restart Claude Code
4. Verify that the server is connected with `/mcp`
Technical details of the BioRender integration can be found in [BioRender’s MCP Server Documentation](https://help.biorender.com/hc/en-gb/articles/30870978672157-How-to-use-the-BioRender-MCP-connector).
## Common use cases
- **Grant proposal figures** - describe your research or experimental design and get relevant template and icon suggestions to create clear proposal figures for reviewers
- “*I'm working on a figure for a grant proposal about chimeric CAR T cell therapy targeting solid tumors. I need two panels: 1. T cells engineered with chimeric antigen receptors 2. CAR T cells mediate cancer cell death. Can you help me find templates that show CAR T cells receptors and CAR T cells trafficking and targeting cancer cells?”*
- **Journal figures & graphical abstracts** - use the text of your paper’s key findings to get template and icon suggestions for creating publication visuals
- “*I need to create a graphical abstract about CRISPR-Cas9 gene editing in plant cells. I want to show the Cas9 protein, guide RNA, DNA double-strand break, and the DNA repair process. Can you find me templates for CRISPR mechanisms and plant cell structures?”*
- **Presentations for conferences & internal lab meetings** - describe your experimental workflow or steps to get icon and template recommendations for use in internal lab teams meetings and for creating presentations and posters for use at conferences
- “*I need to explain the experimental workflow for protein crystallization during a presentation. Can you find templates showing the process, including protein expression and purification, protein crystallization, and X-ray diffraction?”*
------------------------------------------------------------------------
Related Articles
Getting Started with Claude for Life Sciences
Using the Synapse.org connector in Claude
Using the PubMed Connector in Claude
Using the 10x Genomics Extension in Claude
Using the Scholar Gateway Connector in Claude
---
## using-the-blackbaud-connector-in-claude.md
3. Using the Blackbaud Connector in Claude
# Using the Blackbaud Connector in Claude
The Blackbaud Connector provides Claude with secure access to Raiser’s Edge NXT fundraising data, enabling nonprofit professionals to retrieve donor records, gifts, events, and generate communications using natural language. This article explains how to set up and use the Blackbaud Connector for your fundraising workflows.
The Blackbaud Connector relies upon Claude’s ability to use remote connectors.
## What This Integration Provides
### Capabilities
The Blackbaud Connector enables Claude to access and interact with your fundraising data from Raiser’s Edge NXT.
- **Constituent Profile Retrieval:** Access detailed donor profiles including contact information, affiliations, and giving history. Claude can retrieve comprehensive constituent data on demand.
- **Constituent Search:** Search for donors by name or partial name across your Raiser’s Edge NXT database, making it easy to find specific individuals in your records.
- **Event Discovery:** Search for fundraising events by name or keyword and retrieve event details including dates, locations, funds raised, and participant information.
- **Gift Record Access:** View specific gift records including donation amounts, dates, donors, and associated campaigns to understand giving patterns.
- **Communication Generation:** Draft personalized thank-you notes, outreach emails, and other donor communications using data from your records.
- **Real-Time Data Access:** The connector fetches information on-demand from Raiser’s Edge NXT, ensuring the data Claude provides is current at the moment you ask.
### How Claude Uses Blackbaud Data
Claude applies your Blackbaud fundraising data to support nonprofit workflows.
- Donor Research: Retrieves constituent profiles and giving histories to help you understand donor relationships and prepare for meetings or outreach.
- Gift Analysis: Pulls donation records to identify giving patterns, track campaign performance, and recognize major donors.
- Event Planning Support: Searches event records to review past fundraising activities, compare results, and inform future event strategies.
- Personalized Communications: Uses donor data to draft customized thank-you letters, appeals, and follow-up messages that reference specific gifts and engagement history.
- Quick Data Lookups: Enables rapid answers to questions about constituents, events, or gifts without requiring you to open Raiser’s Edge NXT directly.
## Setting Up the Blackbaud Connector
### For Blackbaud Marketplace Admins
Your Marketplace admin needs to connect the Claude for Blackbaud application:
1. Navigate to the [Claude for Blackbaud app](https://app.blackbaud.com/marketplace) in the Blackbaud Marketplace.
2. Connect it to your Blackbaud environment.
3. Approve scopes during installation for access to constituent and event data.
### For Organization Owners
1. From [Claude.ai](http://claude.ai), navigate to Settings.
2. Select Connectors or Integrations.
3. Select Add server or Browse connectors.
4. Search for and select Blackbaud from the available connectors.
5. Follow the prompts to add the Blackbaud server to your Claude organization.
6. Confirm authorization to enable the integration.
### For Individual Users
After admin setup is complete:
1. Log into Claude with your enterprise account.
2. Go to Settings, then Connectors.
3. Select Blackbaud Connector, then choose Connect or Authorize.
4. Sign in with your Blackbaud ID and grant permission for Claude to access your data.
5. Your Blackbaud account will show as Linked once authorization is complete.
## Common Use Cases
### Donor Lookup
Example prompt:
Show me the profile for Jane Smith, including her contact information and
recent donations.
**When to use:** Preparing for donor meetings, reviewing constituent relationships, or verifying contact details.
**Tip:** Include the donor’s full name for more accurate results.
### Gift History Analysis
Example prompt:
What are the details of John Doe’s donations over the past year? Include
amounts, dates, and which campaigns they supported.
**When to use:** Reviewing donor engagement, preparing acknowledgment letters, or analyzing giving patterns.
**Works well with:** Requests spanning 1-3 years to identify trends without overwhelming detail.
### Event Research
Example prompt:
Find any events titled “Annual Gala” and show me the details including
attendance and funds raised.
**When to use:** Planning future events, comparing year-over-year performance, or researching past fundraising activities.
**Note:** Use specific keywords that match your event naming conventions for best results.
### Thank-You Letter Drafting
Example prompt:
Draft a personalized thank-you email to Sarah Johnson for her recent $500
donation to the Building Fund campaign.
**When to use:** Following up on donations, acknowledging major gifts, or sending timely appreciation messages.
**Key benefit:** Claude retrieves the donor’s information and gift details to create personalized, accurate communications.
### Constituent Search
Example prompt:
Find all constituents named Williams in our database.
**When to use:** Locating donors when you have partial name information or searching for related family members.
**Tip:** Start with partial searches and narrow down results based on additional identifying information.
## Tips for Using the Blackbaud Connector
- Use full donor names for more accurate constituent lookups.
- Specify time periods when requesting gift histories (e.g., “past 12 months,” “2024 fiscal year”).
- Ask naturally—describe what you need as if asking a colleague.
- Combine multiple requests when helpful (e.g., “Show me Jane’s profile and draft a thank-you for her last gift”).
- Always review AI-generated communications before sending, especially those involving sensitive donor information.
- Remember that Claude only accesses data your Blackbaud user account is authorized to view.
---
## using-the-candid-connector-in-claude.md
# Using the Candid Connector in Claude
The Candid integration brings the power of Candid’s comprehensive nonprofit and funder data directly into Claude. This article explains how to set up and use the Candid connector to search millions of organizations, discover funding opportunities, and access expert knowledge about the social sector—all through natural conversation.
Play
The Candid integration relies upon Claude’s ability to use remote connectors.
## What this integration provides
The Candid integration connects Claude directly to Candid’s extensive database of nonprofit and philanthropic information. Candid is a nonprofit that provides the most comprehensive data and insights about the social sector, connecting people who want to change the world with the resources they need to do it.
This integration provides access to:
- Over 1.9 million nonprofits and foundations
- Expert knowledge base with research reports, training materials, and news
- Taxonomies describing work across the nonprofit and philanthropic sector
- Comprehensive organizational profiles with mission, location, financials, and grants data
## Who can access the Candid integration?
The Candid integration is available to Claude Pro users. A Candid account is not required to use basic search functionality. Some advanced features may require additional authentication.
**Note:** This tool is currently in beta. Core functionality is available, but some advanced features are still under development. Please reach out with feedback to [\[email protected\]](/cdn-cgi/l/email-protection#abc4c5c7c2c5cec7c2c9d9cad9c2cac5ebc8cac5cfc2cf85c4d9cc).
## Setting up the Candid integration
### For Organization Owners (Team and Enterprise)
1. Navigate to [Admin settings \> Connectors](https://claude.ai/admin-settings/connectors)
2. Select “Browse connectors”
3. Search and select “Candid”
4. Select “Add to your team”
### For Individual Claude Users
1. Navigate to Settings \> Connectors
2. Select “Browse connectors”
3. Search and select “Candid”
4. Follow the instructions to enable the Candid connector
Learn about [finding and connecting tools](https://support.claude.com/en/articles/11724452-using-the-connectors-directory-to-extend-claude-s-capabilities) in Claude.
------------------------------------------------------------------------
## Available tools
The Candid MCP connector provides several powerful tools that Claude can use to answer your questions. Here are the main capabilities:
### 1. Search organizations
**What it does:** Search for nonprofits and foundations by name, mission description, location, or areas of work.
**Use it for:**
- Finding specific organizations by name or EIN
- Discovering organizations working on particular issues
- Locating nonprofits serving specific geographic areas
- Finding organizations with specific transparency levels or leadership demographics
**Example queries:**
- "Find homeless shelters in New York City that have specific support for women"
- "Show me environmental foundations in Northern California"
**Key features:**
- Hybrid search combining keyword and semantic matching
- Filter by location (postal code, state/province, or geographic IDs)
- Filter by subject areas and populations served
- Filter by transparency seals (Platinum, Gold, Silver, Bronze)
- Filter by leader demographics (women, BIPOC, LGBTQ+, people with disabilities)
- Access organizational mission and program information
### 2. Find mentioned organizations
**What it does:** Automatically identifies organization names in responses and links them to official Candid profiles.
**Use it for:**
- Getting quick access to detailed organization profiles
- Verifying organization information
- Exploring organizations mentioned in research or news articles
**How it works:** When Claude mentions an organization, this tool finds the official match in Candid's database and creates clickable links to their profiles—no extra work required! If you have a paid subscription to [Candid’s web products](https://candid.org/), you can also click through to see advanced information like specific grant histories, in-depth financials, affiliated people, or openness to funding applications.
### 3. Knowledge search
**What it does:** Search Candid's expert knowledge base including research reports, training materials, blog posts, and curated news.
**Use it for:**
- Learning about trends in philanthropy
- Finding best practices and expert guidance
- Staying current with sector news
- Accessing academic research on social issues
- Getting help with Candid's platform and tools
**Available sources:**
- Candid insights: Articles from sector experts and thought leaders
- Candid help: FAQs and guidance on using Candid's platform
- Candid learning: Training documents from subject matter experts
- Candid news: Real-time updates on philanthropic activity worldwide
- IssueLab research reports: Academic research on the social sector
- YouTube training: Transcripts from video training seminars
**Example queries:**
- "What are recent trends in climate philanthropy?"
- "How do I write an effective grant proposal?"
- "What's new in nonprofit fundraising strategies?"
- "Show me research on food insecurity in rural communities"
### 4. Find relevant taxonomic terms
**What it does:** Uses AI to identify relevant terms from Candid's Philanthropy Classification System (PCS) taxonomy based on your description.
**Use it for:**
- Understanding how Candid categorizes work in the social sector
- Getting accurate taxonomy codes for advanced searches
- Exploring related subject areas or populations served
**Example queries:**
- "What taxonomy terms relate to mental health services for veterans?"
- "Show me PCS codes for climate change work"
**About the PCS taxonomy:** Candid's taxonomy describes activity across the social and philanthropic sectors, covering subjects (what organizations work on) and populations served (who they serve). Learn more at taxonomy.candid.org.
### Behind the scenes
The connector also includes technical tools that work automatically in the background to ensure accurate, timely results—like converting location descriptions into searchable geographic codes, or identifying the current date for time-sensitive queries. You don't need to think about these; Claude uses them automatically when needed.
------------------------------------------------------------------------
## Usage examples
### Example 1: Finding organizations in your area
**You ask:** "I'm looking for foundations in California that fund youth education programs."
**Claude will:**
1. Use Search Organizations with relevant filters (admin1='CA', search terms related to youth education)
2. Return a list of matching foundations with links to their Candid profiles
3. Provide relevant details like location, mission focus, and Seals of Transparency level
**Sample response:**
Based on my search of Candid's database, I found several notable foundations in California that fund youth education programs:
Quest Foundation - Danville, CA
- Has awarded 243 grants totaling over \$9.3 million
- Focuses on: elementary and secondary education, charter schools, higher education, reading promotion, and youth services
- Also supports family services and child welfare
Ross Stores Foundation - Dublin, CA
- Has awarded 225 grants totaling over \$4 million
- Accepts applications (though no current open funding opportunities listed)
- Focuses on: higher education, out-of-school learning, reading promotion, and youth development
- Specifically serves children and youth
\[Additional details about their focus areas...\]
### Example 2: Researching sector trends
**You ask:** "What are the latest trends in climate philanthropy?"
**Claude will:**
1. Use Knowledge Search to find recent articles, research, and blog posts about climate philanthropy.
2. Use Find Mentioned Organizations to link any organizations mentioned in the content.
3. Synthesize findings into a comprehensive overview.
**Sample response:**
Based on the latest research and insights from the philanthropic sector, here are the key trends shaping climate philanthropy:
*Significant Growth, But Still Insufficient*
Foundation funding for climate mitigation nearly tripled from 2019 to 2023, reaching \$4.8 billion according to ClimateWorks Foundation. However, this represents less than 2% of global philanthropic giving—far below what's needed to address the crisis.
*Major Geographic Disparities*
60% of single-region foundation funding goes to the U.S. and Europe, while Africa, Asia, Oceania, and Latin America receive only 20%. Low- to middle-income countries most vulnerable to climate impacts capture just 14% of funding.
\[Additional insights with citations and links...\]
### Example 3: Exploring organizations by mission
**You ask:** "Help me find nonprofits working on food access in Seattle that are highly transparent."
**Claude will:**
1. Use Find Named Locations to identify Seattle's geographic ID
2. Use Find Relevant Taxonomic Terms to identify food security subject codes
3. Use Search Organizations with location, subject, and Seals of Transparency filters
4. Return a curated list with profile links and details about their work
### Example 4: Learning about the sector
**You ask:** "I'm new to grant writing. What are best practices?"
**Claude will:**
1. Use Knowledge Search targeting Candid learning and Candid Help sources
2. Provide expert guidance from Candid's training materials
3. Link to relevant articles and video transcripts for deeper learning
------------------------------------------------------------------------
## Tips for best results
### Be specific with locations
When searching for organizations, specific location information helps narrow results:
- ✅ "nonprofits in Brooklyn, New York"
- ✅ "foundations serving rural Montana communities"
- ❌ "organizations in the Northeast" (too broad)
### Describe work, not just keywords
The search tools understand descriptions of work, not just keywords:
- ✅ "organizations helping homeless youth find permanent housing"
- ✅ "funders supporting immigrant and refugee integration programs"
- ✅ "nonprofits providing mental health services to veterans"
### Combine filters for precision
### You can request multiple filters at once:
- "Environmental organizations in California with BIPOC leadership"
- "Healthcare nonprofits in Texas with Platinum transparency seals"
### Ask follow-up questions
Once you have results, dig deeper:
- "Tell me more about \[organization name\]"
- "What is this organization's mission?"
- "Are there similar organizations in other states?"
### Use knowledge search for context
Before diving into organizational data, get context:
- "What should I know about funding for affordable housing?"
- "What are current best practices in nonprofit board governance?"
### Be careful with analytical questions
The current tool is designed for searching about specific organizations or general sector knowledge. It does not currently directly support questions involving calculations, aggregations, or analysis like:
- "Which nonprofits received the 3 largest grants for community healthcare in 2023?”
- “What was the % change in funding from these grant providers in the last 5 years?”
Claude may still try to answer these questions, but it may not be fully accurate. We are working on supporting such questions directly in the future - stay tuned! In addition, deeper information on grants funding and trends is always available through Candid's subscription products on candid.org.
## Common use cases
### Find organizations
Search for nonprofits and foundations by name, mission, location, leadership demographics, or area of work.
Example prompts:
“Find nonprofits focused on climate change adaptation in California.”
“Show me foundations that fund education initiatives in rural areas.”
“What organizations work on affordable housing in Chicago?”
### Research organizational profiles
Get comprehensive details about specific organizations including their mission, programs, financials, and leadership.
Example prompts:
“Tell me about the Ford Foundation’s grantmaking priorities”
“What is the annual budget of Habitat for Humanity?”
“Who are the board members of the Sierra Club Foundation?”
### Discover funding opportunities
Find foundations and funding opportunities that match specific criteria or project areas.
Example prompts:
“What foundations fund early childhood education programs?”
“Find corporate giving programs that support STEM education”
“Which funders have given grants to organizations working on food
insecurity?”
### Access expert knowledge
Tap into Candid’s research reports, training materials, and social sector news.
Example prompts:
“What are current trends in nonprofit fundraising?”
“How do I write a strong grant proposal?”
“What are best practices for nonprofit board governance?”
## FAQs
### Is the Candid integration free to use?
Yes! Basic search functionality is free for all paid Claude plans. Some advanced features requiring access to premium Candid data may require additional authentication.
### How current is the data?
Candid updates its data continuously:
- **Organization data:** Updated regularly from IRS filings, official registrations, and direct organization input.
- **Knowledge base:** Updated continuously with new research, articles, and news.
- **News:** Updated daily with curated sector news.
The integration provides real-time access to the latest available data.
### Can I search international organizations?
Candid has the most comprehensive and up-to-date coverage of US organizations.
### What if I can't find a specific organization?
Not all organizations are in Candid's database. Coverage is most comprehensive for:
- US IRS-registered 501(c)(3) organizations
- US grantmaking foundations
- Organizations that have claimed their Candid profiles
If you can't find an organization, try:
- Searching by EIN (for US organizations)
- Using alternate names or acronyms
- Broadening your search terms
### How do I interpret Seals of Transparency?
Candid Seals of Transparency indicate how much information an organization has shared:
- **Platinum:** Most comprehensive information provided including metrics.
- **Gold:** Dive deep into detailed financials and demographics information.
- **Silver:** More organizational information shared such as program information.
- **Bronze:** Basic core organization information provided.
- **No Seal:** Organization claimed their profile but didn't complete the transparency process.
------------------------------------------------------------------------
## Privacy and data usage
- The Candid integration accesses publicly available nonprofit organization information
- No personal user data is shared with Candid through the integration
- Search queries are used only to retrieve relevant organizational results
- All data comes from Candid’s verified nonprofit database
## Need more help?
If you’re experiencing issues with the Candid integration or have questions not covered here, please contact Claude support or visit our help center for additional troubleshooting guides. For Candid-specific questions, you can reach out to [\[email protected\]](/cdn-cgi/l/email-protection#224d4c4e4b4c474e4b405043504b434c6241434c464b460c4d5045).
---
## using-the-github-integration.md
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
[](#)
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
- Meet Claude
Products
- [](/product/overview)
Claude
- [](/product/claude-code)
Claude Code
- [](/product/cowork)
Claude Cowork
Features
- [](/claude-for-chrome)
Claude for Chrome
- [](/claude-for-slack)
Claude for Slack
- [](/claude-for-excel)
Claude for Excel
- [](/claude-for-powerpoint)
Claude for PowerPoint
- [](/skills)
Skills
Models
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
1. Tutorials
[](/resources/tutorials)
Tutorials
/
2.
Using the GitHub integration
Explore here
- [](#)
Ask questions about this page
- [](#)
Copy as markdown
# Using the GitHub integration
Explore how the GitHub integration can enhance your development process with Claude.
-
Category
Engineering
-
Product
Claude.ai
-
Reading time
Watch time
5
min
3
min
-
Share
[Copy link](#)
https://claude.com/resources/tutorials/using-the-github-integration
## Related tutorials
[Troubleshooting skills](/resources/tutorials/troubleshooting-skills)
Troubleshooting skills
Troubleshooting skills
Tutorial
[Tutorial](/resources/tutorials/troubleshooting-skills)
Tutorial
[Sharing skills](/resources/tutorials/sharing-skills)
Sharing skills
Sharing skills
Tutorial
[Tutorial](/resources/tutorials/sharing-skills)
Tutorial
[How skills compare to other Claude Code features](/resources/tutorials/how-skills-compare-to-other-claude-code-features)
How skills compare to other Claude Code features
How skills compare to other Claude Code features
Tutorial
[Tutorial](/resources/tutorials/how-skills-compare-to-other-claude-code-features)
Tutorial
[Configuration and multi-file skills](/resources/tutorials/configuration-and-multi-file-skills)
Configuration and multi-file skills
Configuration and multi-file skills
Tutorial
[Tutorial](/resources/tutorials/configuration-and-multi-file-skills)
Tutorial
[Homepage](https://claude.com)
Homepage
[Next](#)
Next
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Write
[Button Text](#)
Button Text
Learn
[Button Text](#)
Button Text
Code
[Button Text](#)
Button Text
Write
- Help me develop a unique voice for an audience
[](#)
Hi Claude! Could you help me develop a unique voice for an audience? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Improve my writing style
[](#)
Hi Claude! Could you improve my writing style? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Brainstorm creative ideas
[](#)
Hi Claude! Could you brainstorm creative ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Learn
- Explain a complex topic simply
[](#)
Hi Claude! Could you explain a complex topic simply? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Help me make sense of these ideas
[](#)
Hi Claude! Could you help me make sense of these ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Prepare for an exam or interview
[](#)
Hi Claude! Could you prepare for an exam or interview? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Code
- Explain a programming concept
[](#)
Hi Claude! Could you explain a programming concept? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Look over my code and give me tips
[](#)
Hi Claude! Could you look over my code and give me tips? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Vibe code with me
[](#)
Hi Claude! Could you vibe code with me? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
More
- Write case studies
[](#)
This is another test
- Write grant proposals
[](#)
Hi Claude! Could you write grant proposals? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to — like Google Drive, web search, etc. — if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can - an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Write video scripts
[](#)
this is a test
[Anthropic](https://www.anthropic.com/)
Anthropic
© \[year\] Anthropic PBC
Products
- Claude
[Claude](/product/overview)
Claude
- Claude Code
[Claude Code](/product/claude-code)
Claude Code
- Claude Code for Enterprise
[Claude Code for Enterprise](/product/claude-code/enterprise)
Claude Code for Enterprise
- Claude Cowork
[Claude Cowork](/product/cowork)
Claude Cowork
- Max plan
[Max plan](/pricing/max)
Max plan
- Team plan
[Team plan](/pricing/team)
Team plan
- Enterprise plan
[Enterprise plan](/pricing/enterprise)
Enterprise plan
- Download app
[Download app](/download)
Download app
- Pricing
[Pricing](/pricing)
Pricing
- Log in
[Log in](https://claude.ai/login)
Log in
Features
- Claude for Chrome
[Claude for Chrome](/claude-for-chrome)
Claude for Chrome
- Claude for Slack
[Claude for Slack](/claude-for-slack)
Claude for Slack
- Claude for Excel
[Claude for Excel](/claude-for-excel)
Claude for Excel
- Claude for PowerPoint
[Claude for PowerPoint](/claude-for-powerpoint)
Claude for PowerPoint
- Skills
[Skills](/skills)
Skills
Models
- Opus
[Opus](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- Sonnet
[Sonnet](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- Haiku
[Haiku](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
Solutions
- AI agents
[AI agents](/solutions/agents)
AI agents
- Claude Code Security
[Claude Code Security](/solutions/claude-code-security)
Claude Code Security
- Code modernization
[Code modernization](/solutions/code-modernization)
Code modernization
- Coding
[Coding](/solutions/coding)
Coding
- Customer support
[Customer support](/solutions/customer-support)
Customer support
- Education
[Education](/solutions/education)
Education
- Financial services
[Financial services](/solutions/financial-services)
Financial services
- Government
[Government](/solutions/government)
Government
- Healthcare
[Healthcare](/solutions/healthcare)
Healthcare
- Life sciences
[Life sciences](/solutions/life-sciences)
Life sciences
- Nonprofits
[Nonprofits](/solutions/nonprofits)
Nonprofits
Claude Platform
- Overview
[Overview](/platform/api)
Overview
- Developer docs
[Developer docs](https://platform.claude.com/docs)
Developer docs
- Pricing
[Pricing](https://claude.com/pricing#api)
Pricing
- Marketplace
[Marketplace](/platform/marketplace)
Marketplace
- Amazon Bedrock
[Amazon Bedrock](/partners/amazon-bedrock)
Amazon Bedrock
- Google Cloud’s Vertex AI
[Google Cloud’s Vertex AI](/partners/google-cloud-vertex-ai)
Google Cloud’s Vertex AI
- Microsoft Foundry
[Microsoft Foundry](/partners/microsoft-foundry)
Microsoft Foundry
- Regional compliance
[Regional compliance](/regional-compliance)
Regional compliance
- Console login
[Console login](../04-API-Reference/Other/platform-claude-com.md)
Console login
Resources
- Blog
[Blog](/blog)
Blog
- Claude partner network
[Claude partner network](/partners)
Claude partner network
- Community
[Community](/community)
Community
- Connectors
[Connectors](/connectors)
Connectors
- Courses
[Courses](https://www.anthropic.com/learn)
Courses
- Customer stories
[Customer stories](/customers)
Customer stories
- Engineering at Anthropic
[Engineering at Anthropic](https://www.anthropic.com/engineering)
Engineering at Anthropic
- Events
[Events](https://www.anthropic.com/events)
Events
- Plugins
[Plugins](/plugins)
Plugins
- Powered by Claude
[Powered by Claude](/partners/powered-by-claude)
Powered by Claude
- Service partners
[Service partners](/partners/services)
Service partners
- Startups program
[Startups program](/programs/startups)
Startups program
- Tutorials
[Tutorials](/resources/tutorials)
Tutorials
- Use cases
[Use cases](/resources/use-cases)
Use cases
Company
- Anthropic
[Anthropic](https://www.anthropic.com/)
Anthropic
- Careers
[Careers](https://www.anthropic.com/careers)
Careers
- Economic Futures
[Economic Futures](https://www.anthropic.com/economic-futures)
Economic Futures
- Research
[Research](https://www.anthropic.com/research)
Research
- News
[News](https://www.anthropic.com/news)
News
- Responsible Scaling Policy
[Responsible Scaling Policy](../19-Reference/announcing-our-updated-responsible-scaling-policy-anthropic.md)
Responsible Scaling Policy
- Security and compliance
[Security and compliance](https://trust.anthropic.com/)
Security and compliance
- Transparency
[Transparency](https://anthropic.com/transparency)
Transparency
Help and security
- Availability
[Availability](https://www.anthropic.com/supported-countries)
Availability
- Status
[Status](https://status.anthropic.com/)
Status
- Support center
[Support center](https://support.claude.com/en/)
Support center
Terms and policies
Privacy choices
### Cookie settings
We use cookies to deliver and improve our services, analyze site usage, and if you agree, to customize or personalize your experience and market our services to you. You can read our Cookie Policy [here](https://www.anthropic.com/legal/cookies).
Customize cookie settings
Reject all cookies
Accept all cookies
###### Necessary
Enables security and basic functionality.
Required
###### Analytics
Enables tracking of site performance.
Off
###### Marketing
Enables ads personalization and tracking.
Off
Save preferences
Privacy policy
[Privacy policy](https://www.anthropic.com/legal/privacy)
Privacy policy
Responsible disclosure policy
[Responsible disclosure policy](https://www.anthropic.com/responsible-disclosure-policy)
Responsible disclosure policy
Terms of service: Commercial
[Terms of service: Commercial](https://www.anthropic.com/legal/commercial-terms)
Terms of service: Commercial
Terms of service: Consumer
[Terms of service: Consumer](https://www.anthropic.com/legal/consumer-terms)
Terms of service: Consumer
Usage policy
[Usage policy](https://www.anthropic.com/legal/aup)
Usage policy
[x.com](https://x.com/claudeai)
x.com
[LinkedIn](https://www.linkedin.com/showcase/claude/)
LinkedIn
[YouTube](https://www.youtube.com/@anthropic-ai)
YouTube
[Instagram](https://www.instagram.com/claudeai)
Instagram
English (US)
[English (US)](/resources/tutorials/using-the-github-integration)
[日本語 (Japan)](/ja-jp/resources/tutorials/using-the-github-integration)
[Deutsch (Germany)](/de-de/resources/tutorials/using-the-github-integration)
[Français (France)](/fr-fr/resources/tutorials/using-the-github-integration)
[한국어 (South Korea)](/ko-kr/resources/tutorials/using-the-github-integration)
---
## using-the-google-docs-integration.md
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
[](#)
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
- Meet Claude
Products
- [](/product/overview)
Claude
- [](/product/claude-code)
Claude Code
- [](/product/cowork)
Claude Cowork
Features
- [](/claude-for-chrome)
Claude for Chrome
- [](/claude-for-slack)
Claude for Slack
- [](/claude-for-excel)
Claude for Excel
- [](/claude-for-powerpoint)
Claude for PowerPoint
- [](/skills)
Skills
Models
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
1. Tutorials
[](/resources/tutorials)
Tutorials
/
2.
Using the Google Docs integration
Explore here
- [](#)
Ask questions about this page
- [](#)
Copy as markdown
# Using the Google Docs integration
Learn how to connect and use the Google Docs integration to seamlessly incorporate your documents into conversations with Claude.
-
Category
Professional
-
Product
Claude.ai
-
Reading time
Watch time
5
min
7
min
-
Share
[Copy link](#)
https://claude.com/resources/tutorials/using-the-google-docs-integration
## Related tutorials
[Choosing the right Claude model: Haiku, Sonnet, and Opus](/resources/tutorials/choosing-the-right-claude-model)
Choosing the right Claude model: Haiku, Sonnet, and Opus
Choosing the right Claude model: Haiku, Sonnet, and Opus
Tutorial
[Tutorial](/resources/tutorials/choosing-the-right-claude-model)
Tutorial
[Claude Enterprise Administrator Guide](/resources/tutorials/claude-enterprise-administrator-guide)
Claude Enterprise Administrator Guide
Claude Enterprise Administrator Guide
Tutorial
[Tutorial](/resources/tutorials/claude-enterprise-administrator-guide)
Tutorial
[How to customize plugins in Cowork](/resources/tutorials/how-to-customize-plugins-in-cowork)
How to customize plugins in Cowork
How to customize plugins in Cowork
Tutorial
[Tutorial](/resources/tutorials/how-to-customize-plugins-in-cowork)
Tutorial
[How to build a plugin from scratch in Cowork](/resources/tutorials/how-to-build-a-plugin-from-scratch-in-cowork)
How to build a plugin from scratch in Cowork
How to build a plugin from scratch in Cowork
Tutorial
[Tutorial](/resources/tutorials/how-to-build-a-plugin-from-scratch-in-cowork)
Tutorial
[Homepage](https://claude.com)
Homepage
[Next](#)
Next
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Write
[Button Text](#)
Button Text
Learn
[Button Text](#)
Button Text
Code
[Button Text](#)
Button Text
Write
- Help me develop a unique voice for an audience
[](#)
Hi Claude! Could you help me develop a unique voice for an audience? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Improve my writing style
[](#)
Hi Claude! Could you improve my writing style? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Brainstorm creative ideas
[](#)
Hi Claude! Could you brainstorm creative ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Learn
- Explain a complex topic simply
[](#)
Hi Claude! Could you explain a complex topic simply? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Help me make sense of these ideas
[](#)
Hi Claude! Could you help me make sense of these ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Prepare for an exam or interview
[](#)
Hi Claude! Could you prepare for an exam or interview? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Code
- Explain a programming concept
[](#)
Hi Claude! Could you explain a programming concept? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Look over my code and give me tips
[](#)
Hi Claude! Could you look over my code and give me tips? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Vibe code with me
[](#)
Hi Claude! Could you vibe code with me? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
More
- Write case studies
[](#)
This is another test
- Write grant proposals
[](#)
Hi Claude! Could you write grant proposals? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to — like Google Drive, web search, etc. — if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can - an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Write video scripts
[](#)
this is a test
[Anthropic](https://www.anthropic.com/)
Anthropic
© \[year\] Anthropic PBC
Products
- Claude
[Claude](/product/overview)
Claude
- Claude Code
[Claude Code](/product/claude-code)
Claude Code
- Claude Code for Enterprise
[Claude Code for Enterprise](/product/claude-code/enterprise)
Claude Code for Enterprise
- Claude Cowork
[Claude Cowork](/product/cowork)
Claude Cowork
- Max plan
[Max plan](/pricing/max)
Max plan
- Team plan
[Team plan](/pricing/team)
Team plan
- Enterprise plan
[Enterprise plan](/pricing/enterprise)
Enterprise plan
- Download app
[Download app](/download)
Download app
- Pricing
[Pricing](/pricing)
Pricing
- Log in
[Log in](https://claude.ai/login)
Log in
Features
- Claude for Chrome
[Claude for Chrome](/claude-for-chrome)
Claude for Chrome
- Claude for Slack
[Claude for Slack](/claude-for-slack)
Claude for Slack
- Claude for Excel
[Claude for Excel](/claude-for-excel)
Claude for Excel
- Claude for PowerPoint
[Claude for PowerPoint](/claude-for-powerpoint)
Claude for PowerPoint
- Skills
[Skills](/skills)
Skills
Models
- Opus
[Opus](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- Sonnet
[Sonnet](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- Haiku
[Haiku](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
Solutions
- AI agents
[AI agents](/solutions/agents)
AI agents
- Claude Code Security
[Claude Code Security](/solutions/claude-code-security)
Claude Code Security
- Code modernization
[Code modernization](/solutions/code-modernization)
Code modernization
- Coding
[Coding](/solutions/coding)
Coding
- Customer support
[Customer support](/solutions/customer-support)
Customer support
- Education
[Education](/solutions/education)
Education
- Financial services
[Financial services](/solutions/financial-services)
Financial services
- Government
[Government](/solutions/government)
Government
- Healthcare
[Healthcare](/solutions/healthcare)
Healthcare
- Life sciences
[Life sciences](/solutions/life-sciences)
Life sciences
- Nonprofits
[Nonprofits](/solutions/nonprofits)
Nonprofits
Claude Platform
- Overview
[Overview](/platform/api)
Overview
- Developer docs
[Developer docs](https://platform.claude.com/docs)
Developer docs
- Pricing
[Pricing](https://claude.com/pricing#api)
Pricing
- Marketplace
[Marketplace](/platform/marketplace)
Marketplace
- Amazon Bedrock
[Amazon Bedrock](/partners/amazon-bedrock)
Amazon Bedrock
- Google Cloud’s Vertex AI
[Google Cloud’s Vertex AI](/partners/google-cloud-vertex-ai)
Google Cloud’s Vertex AI
- Microsoft Foundry
[Microsoft Foundry](/partners/microsoft-foundry)
Microsoft Foundry
- Regional compliance
[Regional compliance](/regional-compliance)
Regional compliance
- Console login
[Console login](../04-API-Reference/Other/platform-claude-com.md)
Console login
Resources
- Blog
[Blog](/blog)
Blog
- Claude partner network
[Claude partner network](/partners)
Claude partner network
- Community
[Community](/community)
Community
- Connectors
[Connectors](/connectors)
Connectors
- Courses
[Courses](https://www.anthropic.com/learn)
Courses
- Customer stories
[Customer stories](/customers)
Customer stories
- Engineering at Anthropic
[Engineering at Anthropic](https://www.anthropic.com/engineering)
Engineering at Anthropic
- Events
[Events](https://www.anthropic.com/events)
Events
- Plugins
[Plugins](/plugins)
Plugins
- Powered by Claude
[Powered by Claude](/partners/powered-by-claude)
Powered by Claude
- Service partners
[Service partners](/partners/services)
Service partners
- Startups program
[Startups program](/programs/startups)
Startups program
- Tutorials
[Tutorials](/resources/tutorials)
Tutorials
- Use cases
[Use cases](/resources/use-cases)
Use cases
Company
- Anthropic
[Anthropic](https://www.anthropic.com/)
Anthropic
- Careers
[Careers](https://www.anthropic.com/careers)
Careers
- Economic Futures
[Economic Futures](https://www.anthropic.com/economic-futures)
Economic Futures
- Research
[Research](https://www.anthropic.com/research)
Research
- News
[News](https://www.anthropic.com/news)
News
- Responsible Scaling Policy
[Responsible Scaling Policy](../19-Reference/announcing-our-updated-responsible-scaling-policy-anthropic.md)
Responsible Scaling Policy
- Security and compliance
[Security and compliance](https://trust.anthropic.com/)
Security and compliance
- Transparency
[Transparency](https://anthropic.com/transparency)
Transparency
Help and security
- Availability
[Availability](https://www.anthropic.com/supported-countries)
Availability
- Status
[Status](https://status.anthropic.com/)
Status
- Support center
[Support center](https://support.claude.com/en/)
Support center
Terms and policies
Privacy choices
### Cookie settings
We use cookies to deliver and improve our services, analyze site usage, and if you agree, to customize or personalize your experience and market our services to you. You can read our Cookie Policy [here](https://www.anthropic.com/legal/cookies).
Customize cookie settings
Reject all cookies
Accept all cookies
###### Necessary
Enables security and basic functionality.
Required
###### Analytics
Enables tracking of site performance.
Off
###### Marketing
Enables ads personalization and tracking.
Off
Save preferences
Privacy policy
[Privacy policy](https://www.anthropic.com/legal/privacy)
Privacy policy
Responsible disclosure policy
[Responsible disclosure policy](https://www.anthropic.com/responsible-disclosure-policy)
Responsible disclosure policy
Terms of service: Commercial
[Terms of service: Commercial](https://www.anthropic.com/legal/commercial-terms)
Terms of service: Commercial
Terms of service: Consumer
[Terms of service: Consumer](https://www.anthropic.com/legal/consumer-terms)
Terms of service: Consumer
Usage policy
[Usage policy](https://www.anthropic.com/legal/aup)
Usage policy
[x.com](https://x.com/claudeai)
x.com
[LinkedIn](https://www.linkedin.com/showcase/claude/)
LinkedIn
[YouTube](https://www.youtube.com/@anthropic-ai)
YouTube
[Instagram](https://www.instagram.com/claudeai)
Instagram
English (US)
[English (US)](/resources/tutorials/using-the-google-docs-integration)
[日本語 (Japan)](/ja-jp)
[Deutsch (Germany)](/de-de)
[Français (France)](/fr-fr)
[한국어 (South Korea)](/ko-kr)
---
## using-the-google-drive-integrationhttps-support-claude-com-en-articles-10166901.md
# Use Google Workspace connectors
Connect your Gmail, Google Calendar, and Google Drive to Claude so you can search emails, manage your calendar, work with documents, and save files—all without leaving the conversation.
Google Workspace connectors (Gmail, Google Calendar, and Google Drive) are available for all users on Claude and Claude Desktop.
For Team and Enterprise plans, an Owner or Primary Owner must enable these connectors at the organization level before individual users can authenticate. For setup instructions, read **[Use connectors to extend Claude's capabilities](use-connectors-to-extend-claude-s-capabilities.md#h_17dd443beb)**.
## What you can do
### Gmail
- **Search and read emails** using natural language queries
- **Draft emails** with proper formatting and context — Claude creates drafts in your Gmail account, but cannot send emails on your behalf
- **Access email metadata**, including attachment metadata (not attachment content)
- **Manage email organization** with labels and threads
- **List saved drafts** in your Gmail account
### Google Calendar
- **View events and calendars**, including shared calendars you have access to
- **Create, update, and delete events** with full customization
- **Find mutual availability** across attendees
- **Manage attendee lists** and respond to invitations (accept, decline, or tentative)
- **Set up recurring meetings**
### Google Drive
- **Search and retrieve Google Docs** from your Drive
- **Add Google Docs directly to chats and projects** by pasting URLs or selecting from recent documents
- **View file permissions** and **list recent changes** to your Drive
- **Save Claude-generated files** directly to your Drive (requires **[code execution and file creation](https://support.claude.com/en/articles/12111783-create-and-edit-files-with-claude#h_1c99382190)** to be enabled)
**Note:** Claude extracts text content only from Google Drive files. Images embedded in documents are not processed.
------------------------------------------------------------------------
## How to use the connectors
Ask Claude a question that requires access to your Gmail, Calendar, or Drive. Claude automatically detects which tools it needs and uses them to respond. Each action Claude takes on your behalf requires your explicit approval.
Claude's response includes citations indicating which emails, calendar events, or documents were used as sources, with links to the originals when available. You can ask follow-up questions to dig deeper into any source.
### Add Google Drive files to chats
1. Click the plus sign in the chat interface.
2. Select “Add from Google Drive.”
3. Search through your recently accessed documents or paste the document's URL.
4. When you send your message, Claude accesses and processes the document to inform its response.
You can add multiple files to a single chat to give Claude comprehensive context. The files must fit within the conversation's context window.
### Add Google Drive files to projects
The Google Drive connector is only available when adding to **Files** in private projects. This option will be disabled for shared projects.
1. Open your project and find the **Files** section.
2. Click the “+” button to add files.
3. Select “Drive.”
4. Search through your recently accessed documents or paste the document's URL.
5. Your document is added to your project knowledge for Claude to access when chatting in that project.
Google Docs added to chats and projects sync directly from Google Drive, so you're always working with the latest version.
### Managing individual connectors
You can enable or disable specific connectors from below the chat interface:
1. Click the plus sign in the chat interface.
2. Hover over “Connectors.”
3. Toggle individual connectors on or off.
------------------------------------------------------------------------
## Google Drive Cataloging (Enterprise)
Google Drive Cataloging is only available for Enterprise plans.
Enterprise users can enable Google Drive Cataloging to index their Drive content with RAG (Retrieval Augmented Generation). When enabled, Claude indexes your Google Drive documents to provide more accurate, contextual responses with direct citations to relevant sources — and reduces token usage by pulling only relevant content into your context.
If cataloging is turned off, Claude uses the Google APIs to search through your Drive data directly.
### Supported file types for cataloging
Google Docs (text extraction only, up to 10MB).
### Enable Google Drive Cataloging
**For admins:**
1. Navigate to **[Organization settings \> Capabilities](https://claude.ai/admin-settings/capabilities)**.
2. Locate **Google Drive cataloging** under **Data sources**.
3. Toggle this on and follow the instructions to authenticate.
**For individual users** (after an admin enables the feature):
1. Click the plus sign in the chat interface.
2. Toggle **Drive search** on.
If this is your first time using this feature, you'll be redirected to Google to authenticate.
### How cataloging works
Once enabled, Claude indexes your Google Docs and uses that index during conversations to provide relevant context and citations. Claude periodically re-indexes documents that have changed and de-indexes documents that have been deleted. It may take several hours for Claude to recognize updates or deletions.
### Cataloging data retention
- Indexed data for a deleted file is removed within one hour of the file being deleted.
- When an admin turns off cataloging, all indexed data for the organization is deleted within six hours.
------------------------------------------------------------------------
## Privacy and data handling
- You must authenticate directly with your Google account before using these connectors.
- On Team and Enterprise plans, an Owner or Primary Owner must enable connectors at the account level before individual users can authenticate.
- Claude can only access the Gmail, Calendar, and Drive data for the Google account you've connected.
- Claude only accesses your data when you explicitly ask a question or request an action requiring this information, and retrieves the minimum information needed.
- Claude mirrors your existing permissions — you cannot access information you don't already have access to in Google Workspace.
- Data retrieved while using connectors is stored on Anthropic servers, protected by Anthropic's security infrastructure (see our **[Trust Center](https://trust.anthropic.com/controls#organizational-security)** for details). This data is retained with its associated chat, so you can delete any retrieved data by deleting the chat.
- We do not train our models on your Gmail or Calendar connector data, ensuring your private information remains private.
- **Note**: If you are using our consumer products (e.g. Claude Free, Pro, and Max ( when using Claude Code with those accounts) and you have chosen to allow us to use your chats and coding sessions for model training, then any content you copy/paste from your Gmail or Calendar or Claude's responses which include specific information from these connectors may be used to improve our models. For more information, refer to **[Is my data used for model training?](https://privacy.claude.com/en/articles/10023580-is-my-data-used-for-model-training)**
- Each user's Google Drive Cataloging index is private — no other users can access it, even within the same organization. Each index is unique to a user/organization pair, and fully respects your underlying access controls and permissions.
- Data is encrypted at rest and in transit.
### A note on Gmail permissions
During authentication, Google's OAuth screen mentions email sending permissions. Claude only reads emails and creates drafts with your explicit approval. The send function is not enabled — all emails must be sent manually through your Gmail account.
------------------------------------------------------------------------
## Current limitations
- Attachment content is not directly accessible through Gmail (metadata only).
- Claude cannot see images embedded in documents, emails, or presentations.
- Some advanced Gmail filters may not be supported.
- Complex queries may require multiple API calls.
- Rate limits apply per Google's API quotas.
- Performance may vary for large mailboxes.
------------------------------------------------------------------------
## Troubleshooting
### Reconnecting your Google account
If you see the error "*Please try again. You may need to reconnect with your Google Drive account,"* follow these steps:
1. Navigate to **[Customize \> Connectors](https://claude.ai/customize/connectors)**.
2. Find your Google connector and click on it to view the details.
3. Click the “Disconnect” button.
4. Click “Disconnect” in the confirmation message.
5. The next time you use a Google Workspace feature in your chat, you'll be redirected to Google to re-authenticate.
If you're still having trouble, disconnect from your Google account settings at [**myaccount.google.com/connections**](https://myaccount.google.com/connections). Search for the Claude connection, click into the settings, and choose “Delete all connections.”
### Google Workspace admin configuration
If your organization uses Google Workspace and the connectors aren’t working (you may see the message *“Access blocked: your institution's admin needs to review Claude for Google Drive"*), your Google Workspace admin may need to allow Claude as a trusted application:
1. Go to **[admin.google.com](https://admin.google.com)**
2. Navigate to **Security \> Access and data control \> API controls \> Manage third-party app access**.
3. Click “Add app,” then select “OAuth App Name.”
4. Search for “Claude” and set it as “Trusted.”
5. Wait approximately 15 minutes for Google's policy to propagate, then try connecting again.
------------------------------------------------------------------------
## Frequently asked questions
### What happens if I update a Google Doc after adding it to a chat?
The document continues to sync with the most up-to-date version in Google Drive.
### Can I add multiple files to a single chat?
Yes. You can add multiple Google Drive files to provide Claude with comprehensive context. The documents must fit within the conversation's context window.
### What happens if I lose access to a document?
You won't be able to view its contents in conversations where it was previously added. The document preview is removed, but the conversation history is maintained.
### Does Claude have access to images, comments, or suggestions in Google Docs?
No. Claude extracts the main text content only and cannot see images, comments, or suggestions.
### Can Claude send emails on my behalf?
No. Claude can create email drafts, but all emails must be sent manually through your Gmail account.
### Can I opt out of using these connectors?
On Team and Enterprise plans, Owners and Primary Owners can disable Google Workspace connectors for their organization in **[Organization settings \> Connectors](https://claude.ai/admin-settings/connectors)**. Individual users can also disable specific tools from the chat interface.
### Who has access to my Google Drive Cataloging index?
Only you. Your index includes only documents you have access to, and no one else can access it—even members of the same organization. If you disconnect your Google account from Claude, your index is deleted.
---
## using-the-scholar-gateway-connector-in-claude.md
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
[](#)
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
- Meet Claude
Products
- [](/product/overview)
Claude
- [](/product/claude-code)
Claude Code
- [](/product/cowork)
Claude Cowork
Features
- [](/claude-for-chrome)
Claude for Chrome
- [](/claude-for-slack)
Claude for Slack
- [](/claude-for-excel)
Claude for Excel
- [](/claude-for-powerpoint)
Claude for PowerPoint
- [](/skills)
Skills
Models
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
1. Tutorials
[](/resources/tutorials)
Tutorials
/
2.
Using the Scholar Gateway Connector in Claude
Explore here
- [](#)
Ask questions about this page
- [](#)
Copy as markdown
# Using the Scholar Gateway Connector in Claude
Set up and use the Scholar Gateway integration by Wiley with Claude for access to over 3 million peer-reviewed scientific articles.
-
Category
Life Sciences
-
Product
Claude.ai
-
Reading time
Watch time
5
min
min
-
Share
[Copy link](#)
https://claude.com/resources/tutorials/using-the-scholar-gateway-connector-in-claude
The Scholar Gateway by Wiley integration provides authenticated access to the most relevant snippets of scientific research papers to utilize within Claude. This article explains how to set up and use the Scholar Gateway integration with Claude to accelerate your research workflows.
The Scholar Gateway integration relies upon Claude's ability to [use remote connectors](../15-Claude-AI-Features/browsing-and-connecting-to-tools-from-the-directory.md).
## What this integration provides
Currently \>3 million journal articles are available through Scholar Gateway with additional collections, databases and new articles being added all the time.
These datasets cover key STEM subjects including articles from a significant number of leading Life Sciences journals. Specifically, Scholar Gateway has over 300 Life Sciences journals that cover over 900,000 research articles.
Scholar Gateway (Beta) enables AI responses grounded in peer-reviewed sources with verifiable citations and DOI links.
Instead of relying on general AI knowledge, Scholar Gateway (Beta) searches current literature from Wiley journals and research databases to deliver evidence-backed answers with complete source metadata.
While the Beta currently provides access to Wiley content only, additional publisher sources will be added soon.
This enables you to verify that claims are backed with sourced research — ensuring your AI-assisted research meets professional research standards.
## Who can access the Scholar Gateway integration
- Existing subscribers to Wiley journals will need to upgrade their subscription following a trial period to allow AI access.
- New subscribers will need to subscribe subject to a trial period.
More details on accessing the integration can be found in [Wiley’s MCP Server Documentation](https://docs.scholargateway.ai/).
## Setting up the Scholar Gateway integration
**For Organization Owners (Team and Enterprise)**
1. Navigate to Admin settings \> Connectors
2. Click "Browse connectors"
3. Click “**Scholar Gateway**”
4. Click “Add to your team”
**For Individual Claude Users**
1. Navigate to Settings \> Connectors
2. Click “Connect”
3. Follow the instructions to authenticate with your Wiley account
Learn about [finding and connecting tools](../15-Claude-AI-Features/browsing-and-connecting-to-tools-from-the-directory.md).
**For Claude Code Users**
1. Command: `/plugin marketplace add anthropics/life-sciences`
2. Command: `/plugin install wiley-scholar-gateway@life-sciences`
3. Restart Claude Code
4. Verify that the server is connected with `/mcp`
Technical details of the Scholar Gateway integration can be found in [Wiley’s MCP Server Documentation](https://docs.scholargateway.ai/).
## Common use cases
- Enhanced literature review when planning experiments and research plans, to efficiently identify, summarize, and evaluate relevant literature as individual articles or in aggregation, enabling new ways of doing research and delivering reliable and cited insights in seconds.
- Information on latest research in a certain field of medicine or pharmaceuticals.
## Related tutorials
[How to use the Nextflow Deployment agent skill with Claude Code](/resources/tutorials/how-to-use-the-nextflow-deployment-agent-skill-with-claude-code)
How to use the Nextflow Deployment agent skill with Claude Code
How to use the Nextflow Deployment agent skill with Claude Code
Tutorial
[Tutorial](/resources/tutorials/how-to-use-the-nextflow-deployment-agent-skill-with-claude-code)
Tutorial
[How to use the Instrument Data to Allotrope Skill with Claude](/resources/tutorials/how-to-use-the-instrument-data-to-allotrope-skill-with-claude)
How to use the Instrument Data to Allotrope Skill with Claude
How to use the Instrument Data to Allotrope Skill with Claude
Tutorial
[Tutorial](/resources/tutorials/how-to-use-the-instrument-data-to-allotrope-skill-with-claude)
Tutorial
[How to use the Scientific Problem Selection Skill with Claude](/resources/tutorials/how-to-use-the-scientific-problem-selection-skill-with-claude)
How to use the Scientific Problem Selection Skill with Claude
How to use the Scientific Problem Selection Skill with Claude
Tutorial
[Tutorial](/resources/tutorials/how-to-use-the-scientific-problem-selection-skill-with-claude)
Tutorial
[How to use the scVI-Tools bioinformatics skill bundle with Claude](/resources/tutorials/how-to-use-the-scvi-tools-bioinformatics-skill-bundle-with-claude)
How to use the scVI-Tools bioinformatics skill bundle with Claude
How to use the scVI-Tools bioinformatics skill bundle with Claude
Tutorial
[Tutorial](/resources/tutorials/how-to-use-the-scvi-tools-bioinformatics-skill-bundle-with-claude)
Tutorial
[Homepage](https://claude.com)
Homepage
[Next](#)
Next
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Write
[Button Text](#)
Button Text
Learn
[Button Text](#)
Button Text
Code
[Button Text](#)
Button Text
Write
- Help me develop a unique voice for an audience
[](#)
Hi Claude! Could you help me develop a unique voice for an audience? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Improve my writing style
[](#)
Hi Claude! Could you improve my writing style? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Brainstorm creative ideas
[](#)
Hi Claude! Could you brainstorm creative ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Learn
- Explain a complex topic simply
[](#)
Hi Claude! Could you explain a complex topic simply? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Help me make sense of these ideas
[](#)
Hi Claude! Could you help me make sense of these ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Prepare for an exam or interview
[](#)
Hi Claude! Could you prepare for an exam or interview? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Code
- Explain a programming concept
[](#)
Hi Claude! Could you explain a programming concept? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Look over my code and give me tips
[](#)
Hi Claude! Could you look over my code and give me tips? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Vibe code with me
[](#)
Hi Claude! Could you vibe code with me? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
More
- Write case studies
[](#)
This is another test
- Write grant proposals
[](#)
Hi Claude! Could you write grant proposals? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to — like Google Drive, web search, etc. — if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can - an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Write video scripts
[](#)
this is a test
[Anthropic](https://www.anthropic.com/)
Anthropic
© \[year\] Anthropic PBC
Products
- Claude
[Claude](/product/overview)
Claude
- Claude Code
[Claude Code](/product/claude-code)
Claude Code
- Claude Code for Enterprise
[Claude Code for Enterprise](/product/claude-code/enterprise)
Claude Code for Enterprise
- Claude Cowork
[Claude Cowork](/product/cowork)
Claude Cowork
- Max plan
[Max plan](/pricing/max)
Max plan
- Team plan
[Team plan](/pricing/team)
Team plan
- Enterprise plan
[Enterprise plan](/pricing/enterprise)
Enterprise plan
- Download app
[Download app](/download)
Download app
- Pricing
[Pricing](/pricing)
Pricing
- Log in
[Log in](https://claude.ai/login)
Log in
Features
- Claude for Chrome
[Claude for Chrome](/claude-for-chrome)
Claude for Chrome
- Claude for Slack
[Claude for Slack](/claude-for-slack)
Claude for Slack
- Claude for Excel
[Claude for Excel](/claude-for-excel)
Claude for Excel
- Claude for PowerPoint
[Claude for PowerPoint](/claude-for-powerpoint)
Claude for PowerPoint
- Skills
[Skills](/skills)
Skills
Models
- Opus
[Opus](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- Sonnet
[Sonnet](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- Haiku
[Haiku](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
Solutions
- AI agents
[AI agents](/solutions/agents)
AI agents
- Claude Code Security
[Claude Code Security](/solutions/claude-code-security)
Claude Code Security
- Code modernization
[Code modernization](/solutions/code-modernization)
Code modernization
- Coding
[Coding](/solutions/coding)
Coding
- Customer support
[Customer support](/solutions/customer-support)
Customer support
- Education
[Education](/solutions/education)
Education
- Financial services
[Financial services](/solutions/financial-services)
Financial services
- Government
[Government](/solutions/government)
Government
- Healthcare
[Healthcare](/solutions/healthcare)
Healthcare
- Life sciences
[Life sciences](/solutions/life-sciences)
Life sciences
- Nonprofits
[Nonprofits](/solutions/nonprofits)
Nonprofits
Claude Platform
- Overview
[Overview](/platform/api)
Overview
- Developer docs
[Developer docs](https://platform.claude.com/docs)
Developer docs
- Pricing
[Pricing](https://claude.com/pricing#api)
Pricing
- Marketplace
[Marketplace](/platform/marketplace)
Marketplace
- Amazon Bedrock
[Amazon Bedrock](/partners/amazon-bedrock)
Amazon Bedrock
- Google Cloud’s Vertex AI
[Google Cloud’s Vertex AI](/partners/google-cloud-vertex-ai)
Google Cloud’s Vertex AI
- Microsoft Foundry
[Microsoft Foundry](/partners/microsoft-foundry)
Microsoft Foundry
- Regional compliance
[Regional compliance](/regional-compliance)
Regional compliance
- Console login
[Console login](../04-API-Reference/Other/platform-claude-com.md)
Console login
Resources
- Blog
[Blog](/blog)
Blog
- Claude partner network
[Claude partner network](/partners)
Claude partner network
- Community
[Community](/community)
Community
- Connectors
[Connectors](/connectors)
Connectors
- Courses
[Courses](https://www.anthropic.com/learn)
Courses
- Customer stories
[Customer stories](/customers)
Customer stories
- Engineering at Anthropic
[Engineering at Anthropic](https://www.anthropic.com/engineering)
Engineering at Anthropic
- Events
[Events](https://www.anthropic.com/events)
Events
- Plugins
[Plugins](/plugins)
Plugins
- Powered by Claude
[Powered by Claude](/partners/powered-by-claude)
Powered by Claude
- Service partners
[Service partners](/partners/services)
Service partners
- Startups program
[Startups program](/programs/startups)
Startups program
- Tutorials
[Tutorials](/resources/tutorials)
Tutorials
- Use cases
[Use cases](/resources/use-cases)
Use cases
Company
- Anthropic
[Anthropic](https://www.anthropic.com/)
Anthropic
- Careers
[Careers](https://www.anthropic.com/careers)
Careers
- Economic Futures
[Economic Futures](https://www.anthropic.com/economic-futures)
Economic Futures
- Research
[Research](https://www.anthropic.com/research)
Research
- News
[News](https://www.anthropic.com/news)
News
- Responsible Scaling Policy
[Responsible Scaling Policy](../19-Reference/announcing-our-updated-responsible-scaling-policy-anthropic.md)
Responsible Scaling Policy
- Security and compliance
[Security and compliance](https://trust.anthropic.com/)
Security and compliance
- Transparency
[Transparency](https://anthropic.com/transparency)
Transparency
Help and security
- Availability
[Availability](https://www.anthropic.com/supported-countries)
Availability
- Status
[Status](https://status.anthropic.com/)
Status
- Support center
[Support center](https://support.claude.com/en/)
Support center
Terms and policies
Privacy choices
### Cookie settings
We use cookies to deliver and improve our services, analyze site usage, and if you agree, to customize or personalize your experience and market our services to you. You can read our Cookie Policy [here](https://www.anthropic.com/legal/cookies).
Customize cookie settings
Reject all cookies
Accept all cookies
###### Necessary
Enables security and basic functionality.
Required
###### Analytics
Enables tracking of site performance.
Off
###### Marketing
Enables ads personalization and tracking.
Off
Save preferences
Privacy policy
[Privacy policy](https://www.anthropic.com/legal/privacy)
Privacy policy
Responsible disclosure policy
[Responsible disclosure policy](https://www.anthropic.com/responsible-disclosure-policy)
Responsible disclosure policy
Terms of service: Commercial
[Terms of service: Commercial](https://www.anthropic.com/legal/commercial-terms)
Terms of service: Commercial
Terms of service: Consumer
[Terms of service: Consumer](https://www.anthropic.com/legal/consumer-terms)
Terms of service: Consumer
Usage policy
[Usage policy](https://www.anthropic.com/legal/aup)
Usage policy
[x.com](https://x.com/claudeai)
x.com
[LinkedIn](https://www.linkedin.com/showcase/claude/)
LinkedIn
[YouTube](https://www.youtube.com/@anthropic-ai)
YouTube
[Instagram](https://www.instagram.com/claudeai)
Instagram
English (US)
[English (US)](/resources/tutorials/using-the-scholar-gateway-connector-in-claude)
[日本語 (Japan)](/ja-jp)
[Deutsch (Germany)](/de-de)
[Français (France)](/fr-fr)
[한국어 (South Korea)](/ko-kr)
---
## using-the-synapse-org-connector-in-claude.md
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
[](#)
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
- Meet Claude
Products
- [](/product/overview)
Claude
- [](/product/claude-code)
Claude Code
- [](/product/cowork)
Claude Cowork
Features
- [](/claude-for-chrome)
Claude for Chrome
- [](/claude-for-slack)
Claude for Slack
- [](/claude-for-excel)
Claude for Excel
- [](/claude-for-powerpoint)
Claude for PowerPoint
- [](/skills)
Skills
Models
- [](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- [](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- [](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
- Platform
- [](/platform/api)
Overview
- [](https://platform.claude.com/docs)
Developer docs
- [](http://claude.com/pricing#api)
Pricing
- [](../04-API-Reference/Other/platform-claude-com.md)
Console login
- Solutions
Use cases
- [](/solutions/agents)
AI agents
- [](/solutions/claude-code-security)
Claude Code Security
- [](/solutions/coding)
Coding
Industries
- [](/solutions/customer-support)
Customer support
- [](/solutions/education)
Education
- [](/solutions/financial-services)
Financial services
- [](/solutions/government)
Government
- [](/solutions/healthcare)
Healthcare
- [](/solutions/life-sciences)
Life sciences
- [](/solutions/nonprofits)
Nonprofits
- Pricing
- [](/pricing)
Overview
- [](/pricing#api)
API
Pricing
- [](/pricing/max)
Max plan
- [](/pricing/team)
Team plan
- [](/pricing/enterprise)
Enterprise plan
- Resources
Insights
- [](/blog)
Blog
- [](/customers)
Customer stories
- [](https://www.anthropic.com/news)
Anthropic news
Learn
- [](https://www.anthropic.com/learn)
Anthropic Academy
- [](/resources/courses)
Courses
- [](/resources/tutorials)
Tutorials
- [](/resources/use-cases)
Use cases
Tools
- [](/connectors)
Connectors
- [](/plugins)
Plugins
Connect
- [](https://www.anthropic.com/events)
Events
- [](/community)
Community
- [](https://claude.ai/login)
Login
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
-
Contact sales
[Contact sales](/contact-sales)
Contact sales
-
Try Claude
[Try Claude](https://claude.ai/)
Try Claude
1. Tutorials
[](/resources/tutorials)
Tutorials
/
2.
Using the Synapse.org Connector in Claude
Explore here
- [](#)
Ask questions about this page
- [](#)
Copy as markdown
# Using the Synapse.org Connector in Claude
Set up and use the Synapse.org integration with Claude to discover biomedical data and explore project structures across the Synapse platform.
-
Category
Life Sciences
-
Product
Claude.ai
-
Reading time
Watch time
5
min
min
-
Share
[Copy link](#)
https://claude.com/resources/tutorials/using-the-synapse-org-connector-in-claude
The Synapse.org integration by Sage Bionetworks allows researchers to discover biomedical data across all of Synapse, see the structure of projects, and retrieve information on their data assets for authorized users. This article explains how to set up and use the Synapse.org integration with Claude to advance your research and analysis workflows.
The Synapse.org integration relies upon Claude's ability to [use remote connectors](../15-Claude-AI-Features/browsing-and-connecting-to-tools-from-the-directory.md).
## What this integration provides
Services include search and (meta)data retrieval services. Data access will be governed by the access controls defined for each project. Some data are publicly available, while others require approval from Synapse’s governance team prior to access.
## Who can access the Synapse.org integration
- Individuals who have a registered Synapse account ([register for free](https://accounts.synapse.org/register1?appId=synapse.org))
- Data access may be subject to use restriction from contributors
More details on accessing the integration can be found in [Synapse’s MCP Server Documentation](https://github.com/susheel/synapse-mcp?tab=readme-ov-file#synapse-mcp-server).
## Setting up the Synapse.org integration
**For Organization Owners (Team and Enterprise)**
1. Navigate to Admin settings \> Connectors
2. Click "Browse connectors"
3. Click “**Synapse.org**”
4. Click “Add to your team”
**For Individual Claude Users**
1. Navigate to Settings \> Connectors
2. Click “Connect”
3. Follow the instructions to authenticate with your Synapse.org account
Learn about [finding and connecting tools](../15-Claude-AI-Features/browsing-and-connecting-to-tools-from-the-directory.md) in Claude.
**For Claude Code Users**
1. Command: `/plugin marketplace add anthropics/life-sciences`
2. Command: `/plugin install synapse@life-sciences`
3. Restart Claude Code
4. Verify that the server is connected with `/mcp`
Technical details of the Synapse.org integration can be found in [Synapse’s MCP Server Documentation](https://github.com/susheel/synapse-mcp?tab=readme-ov-file#synapse-mcp-server).
## Common use cases
- Search for reusable scientific data across all of the Synapse.org platform
- *“Find RNA-seq datasets related to Alzheimer's disease in Synapse”*
- *“Search Synapse for single-cell transcriptomics datasets”*
- *"Find genomic sequencing data for plexiform neurofibromas in the NF Data Portal”*
- Authorized users can see hierarchy of folders, files, tables, datasets within projects to help organize and monitor data assets
- *“Explain the files and folders in the public AACR Project GENIE project”*
- *“Give me a quick overview of the data assets in the SEA-AD challenge project with agentic track (syn66496696)?”*
- Get custom metadata of entities in Synapse
- *“What are the annotations and metadata for file syn4553239?”*
- *“Show me the custom metadata fields for dataset syn66364675”*
- Get provenance information for entities in Synapse to help understand past data processing
- *“What's the processing history for file syn51543273?”*
- *“Show me the data lineage and upstream dependencies for the dataset syn68719289”*
## Related tutorials
[How to use the Nextflow Deployment agent skill with Claude Code](/resources/tutorials/how-to-use-the-nextflow-deployment-agent-skill-with-claude-code)
How to use the Nextflow Deployment agent skill with Claude Code
How to use the Nextflow Deployment agent skill with Claude Code
Tutorial
[Tutorial](/resources/tutorials/how-to-use-the-nextflow-deployment-agent-skill-with-claude-code)
Tutorial
[How to use the Instrument Data to Allotrope Skill with Claude](/resources/tutorials/how-to-use-the-instrument-data-to-allotrope-skill-with-claude)
How to use the Instrument Data to Allotrope Skill with Claude
How to use the Instrument Data to Allotrope Skill with Claude
Tutorial
[Tutorial](/resources/tutorials/how-to-use-the-instrument-data-to-allotrope-skill-with-claude)
Tutorial
[How to use the Scientific Problem Selection Skill with Claude](/resources/tutorials/how-to-use-the-scientific-problem-selection-skill-with-claude)
How to use the Scientific Problem Selection Skill with Claude
How to use the Scientific Problem Selection Skill with Claude
Tutorial
[Tutorial](/resources/tutorials/how-to-use-the-scientific-problem-selection-skill-with-claude)
Tutorial
[How to use the scVI-Tools bioinformatics skill bundle with Claude](/resources/tutorials/how-to-use-the-scvi-tools-bioinformatics-skill-bundle-with-claude)
How to use the scVI-Tools bioinformatics skill bundle with Claude
How to use the scVI-Tools bioinformatics skill bundle with Claude
Tutorial
[Tutorial](/resources/tutorials/how-to-use-the-scvi-tools-bioinformatics-skill-bundle-with-claude)
Tutorial
[Homepage](https://claude.com)
Homepage
[Next](#)
Next
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Write
[Button Text](#)
Button Text
Learn
[Button Text](#)
Button Text
Code
[Button Text](#)
Button Text
Write
- Help me develop a unique voice for an audience
[](#)
Hi Claude! Could you help me develop a unique voice for an audience? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Improve my writing style
[](#)
Hi Claude! Could you improve my writing style? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Brainstorm creative ideas
[](#)
Hi Claude! Could you brainstorm creative ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Learn
- Explain a complex topic simply
[](#)
Hi Claude! Could you explain a complex topic simply? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Help me make sense of these ideas
[](#)
Hi Claude! Could you help me make sense of these ideas? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Prepare for an exam or interview
[](#)
Hi Claude! Could you prepare for an exam or interview? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
Code
- Explain a programming concept
[](#)
Hi Claude! Could you explain a programming concept? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Look over my code and give me tips
[](#)
Hi Claude! Could you look over my code and give me tips? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Vibe code with me
[](#)
Hi Claude! Could you vibe code with me? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to— like Google Drive, web search, etc.—if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can—an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
More
- Write case studies
[](#)
This is another test
- Write grant proposals
[](#)
Hi Claude! Could you write grant proposals? If you need more information from me, ask me 1-2 key questions right away. If you think I should upload any documents that would help you do a better job, let me know. You can use the tools you have access to — like Google Drive, web search, etc. — if they’ll help you better accomplish this task. Do not use analysis tool. Please keep your responses friendly, brief and conversational.\
\
Please execute the task as soon as you can - an artifact would be great if it makes sense. If using an artifact, consider what kind of artifact (interactive, visual, checklist, etc.) might be most helpful for this specific task. Thanks for your help!
- Write video scripts
[](#)
this is a test
[Anthropic](https://www.anthropic.com/)
Anthropic
© \[year\] Anthropic PBC
Products
- Claude
[Claude](/product/overview)
Claude
- Claude Code
[Claude Code](/product/claude-code)
Claude Code
- Claude Code for Enterprise
[Claude Code for Enterprise](/product/claude-code/enterprise)
Claude Code for Enterprise
- Claude Cowork
[Claude Cowork](/product/cowork)
Claude Cowork
- Max plan
[Max plan](/pricing/max)
Max plan
- Team plan
[Team plan](/pricing/team)
Team plan
- Enterprise plan
[Enterprise plan](/pricing/enterprise)
Enterprise plan
- Download app
[Download app](/download)
Download app
- Pricing
[Pricing](/pricing)
Pricing
- Log in
[Log in](https://claude.ai/login)
Log in
Features
- Claude for Chrome
[Claude for Chrome](/claude-for-chrome)
Claude for Chrome
- Claude for Slack
[Claude for Slack](/claude-for-slack)
Claude for Slack
- Claude for Excel
[Claude for Excel](/claude-for-excel)
Claude for Excel
- Claude for PowerPoint
[Claude for PowerPoint](/claude-for-powerpoint)
Claude for PowerPoint
- Skills
[Skills](/skills)
Skills
Models
- Opus
[Opus](../15-Claude-AI-Features/claude-opus-4-6-anthropic.md)
Opus
- Sonnet
[Sonnet](../15-Claude-AI-Features/claude-sonnet-4-6-anthropic.md)
Sonnet
- Haiku
[Haiku](../15-Claude-AI-Features/claude-haiku-4-5-anthropic.md)
Haiku
Solutions
- AI agents
[AI agents](/solutions/agents)
AI agents
- Claude Code Security
[Claude Code Security](/solutions/claude-code-security)
Claude Code Security
- Code modernization
[Code modernization](/solutions/code-modernization)
Code modernization
- Coding
[Coding](/solutions/coding)
Coding
- Customer support
[Customer support](/solutions/customer-support)
Customer support
- Education
[Education](/solutions/education)
Education
- Financial services
[Financial services](/solutions/financial-services)
Financial services
- Government
[Government](/solutions/government)
Government
- Healthcare
[Healthcare](/solutions/healthcare)
Healthcare
- Life sciences
[Life sciences](/solutions/life-sciences)
Life sciences
- Nonprofits
[Nonprofits](/solutions/nonprofits)
Nonprofits
Claude Platform
- Overview
[Overview](/platform/api)
Overview
- Developer docs
[Developer docs](https://platform.claude.com/docs)
Developer docs
- Pricing
[Pricing](https://claude.com/pricing#api)
Pricing
- Marketplace
[Marketplace](/platform/marketplace)
Marketplace
- Amazon Bedrock
[Amazon Bedrock](/partners/amazon-bedrock)
Amazon Bedrock
- Google Cloud’s Vertex AI
[Google Cloud’s Vertex AI](/partners/google-cloud-vertex-ai)
Google Cloud’s Vertex AI
- Microsoft Foundry
[Microsoft Foundry](/partners/microsoft-foundry)
Microsoft Foundry
- Regional compliance
[Regional compliance](/regional-compliance)
Regional compliance
- Console login
[Console login](../04-API-Reference/Other/platform-claude-com.md)
Console login
Resources
- Blog
[Blog](/blog)
Blog
- Claude partner network
[Claude partner network](/partners)
Claude partner network
- Community
[Community](/community)
Community
- Connectors
[Connectors](/connectors)
Connectors
- Courses
[Courses](https://www.anthropic.com/learn)
Courses
- Customer stories
[Customer stories](/customers)
Customer stories
- Engineering at Anthropic
[Engineering at Anthropic](https://www.anthropic.com/engineering)
Engineering at Anthropic
- Events
[Events](https://www.anthropic.com/events)
Events
- Plugins
[Plugins](/plugins)
Plugins
- Powered by Claude
[Powered by Claude](/partners/powered-by-claude)
Powered by Claude
- Service partners
[Service partners](/partners/services)
Service partners
- Startups program
[Startups program](/programs/startups)
Startups program
- Tutorials
[Tutorials](/resources/tutorials)
Tutorials
- Use cases
[Use cases](/resources/use-cases)
Use cases
Company
- Anthropic
[Anthropic](https://www.anthropic.com/)
Anthropic
- Careers
[Careers](https://www.anthropic.com/careers)
Careers
- Economic Futures
[Economic Futures](https://www.anthropic.com/economic-futures)
Economic Futures
- Research
[Research](https://www.anthropic.com/research)
Research
- News
[News](https://www.anthropic.com/news)
News
- Responsible Scaling Policy
[Responsible Scaling Policy](../19-Reference/announcing-our-updated-responsible-scaling-policy-anthropic.md)
Responsible Scaling Policy
- Security and compliance
[Security and compliance](https://trust.anthropic.com/)
Security and compliance
- Transparency
[Transparency](https://anthropic.com/transparency)
Transparency
Help and security
- Availability
[Availability](https://www.anthropic.com/supported-countries)
Availability
- Status
[Status](https://status.anthropic.com/)
Status
- Support center
[Support center](https://support.claude.com/en/)
Support center
Terms and policies
Privacy choices
### Cookie settings
We use cookies to deliver and improve our services, analyze site usage, and if you agree, to customize or personalize your experience and market our services to you. You can read our Cookie Policy [here](https://www.anthropic.com/legal/cookies).
Customize cookie settings
Reject all cookies
Accept all cookies
###### Necessary
Enables security and basic functionality.
Required
###### Analytics
Enables tracking of site performance.
Off
###### Marketing
Enables ads personalization and tracking.
Off
Save preferences
Privacy policy
[Privacy policy](https://www.anthropic.com/legal/privacy)
Privacy policy
Responsible disclosure policy
[Responsible disclosure policy](https://www.anthropic.com/responsible-disclosure-policy)
Responsible disclosure policy
Terms of service: Commercial
[Terms of service: Commercial](https://www.anthropic.com/legal/commercial-terms)
Terms of service: Commercial
Terms of service: Consumer
[Terms of service: Consumer](https://www.anthropic.com/legal/consumer-terms)
Terms of service: Consumer
Usage policy
[Usage policy](https://www.anthropic.com/legal/aup)
Usage policy
[x.com](https://x.com/claudeai)
x.com
[LinkedIn](https://www.linkedin.com/showcase/claude/)
LinkedIn
[YouTube](https://www.youtube.com/@anthropic-ai)
YouTube
[Instagram](https://www.instagram.com/claudeai)
Instagram
English (US)
[English (US)](/resources/tutorials/using-the-synapse-org-connector-in-claude)
[日本語 (Japan)](/ja-jp)
[Deutsch (Germany)](/de-de)
[Français (France)](/fr-fr)
[한국어 (South Korea)](/ko-kr)