Skip to Content
HomeFAQ

Frequently Asked Questions

What if I need a Tool that Arcade doesn’t have?

Arcade makes it easy to build your own tools! You can fork our existing tools, or build your own from scratch. Learn more about building your own toolkit.

How do I contribute back a Tool to the Registry?

We’re always looking for new tools and toolkits! If you have a tool that you think would be useful to others, please let us know. You can contribute a tool by submitting a pull request to the Arcade GitHub repository .

What is the difference between the Arcade CLI and the Arcade Clients?

The Arcade CLI is a command line tool that makes it easy to build, test, and deploy your own tools to production. The Arcade Client libraries are what you will use within your own agents and applications to call the tools.

How does Arcade.dev relate to the Model Context Protocol (MCP)?

The Arcade.dev engine both speaks MCP and extends it with an authentication-first architecture. This means that you can use Arcade.dev to build tools that can be called by any LLM that supports MCP, while also providing a secure and easy way to authenticate users and manage access to those tools. Learn more about Arcade.dev and MCP.

Auth FAQ

What is the difference between adding an included provider and adding a custom provider?

This is an important observation. Technically, both included and custom providers are OAuth providers. However, when you add an included provider, the Arcade Engine requires less information from you to configure the provider, because it can use the values defined by that provider on their official documentation. Also, most importantly, the Engine will automatically route tools so they connect to the added provider.

Can my users connect multiple accounts of the same provider?

Please contact us if you need this feature.

Can I authenticate multiple tools at once?

Yes, as long as they are from the same OAuth provider. You need to collect all the scopes required by the tools you need, and then authenticate with that provider with all these scopes. For example, for Google Tools, you can use this code to authenticate once:

from arcadepy import Arcade client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable USER_ID = "{arcade_user_id}" # get the list of tools tools = client.tools.list(toolkit="Gmail") # collect the scopes scopes = set() for tool in tools: if tool.requirements.authorization.oauth2.scopes: scopes |= set(tool.requirements.authorization.oauth2.scopes) # start auth auth_response = client.auth.start(user_id=USER_ID, scopes=list(scopes), provider="google") # show the url to the user if needed if auth_response.status != "complete": print(f"Please click here to authorize: {auth_response.url}") # Wait for the authorization to complete client.auth.wait_for_completion(auth_response)

Can I use broader OAuth scopes than what a tool requires?

Yes! If you need broader permissions than what a tool defines as its minimum requirement, you can request additional scopes during authentication.

For example, the GoogleDrive.SearchFiles tool requires the /auth/drive.file scope (which only searches files created by your app or selected via file picker), but if you have approval for the broader /auth/drive scope, you can authenticate with both scopes to search all files on Google Drive.

The tool will work with the broader permissions while still satisfying its minimum scope requirement. Here’s how to authenticate with multiple scopes:

from arcadepy import Arcade client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable user_id = "{arcade_user_id}" auth_response = client.auth.start( user_id=user_id, provider="google", scopes=[ "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive" ] )

After authentication, call GoogleDrive.SearchFiles as usual and it will be able to search all files using the broader token permissions.

Your question is not here?

Please go to the discussions page on GitHub. Someone else may have asked something similar already. If not, please start a new discussion and we’ll get to it as soon as possible.

Get Answers on GitHub
Last updated on