Commit graph

391 commits

Author SHA1 Message Date
Eric Gustin
bbe8cb3478
Update check unauthorized toolkit updates workflow (#449)
Forgot to add the change for the target versions too
2025-06-17 13:46:58 -07:00
Eric Gustin
99aa53d025
Fix check unauthorized toolkit updates workflow (#448)
Changing toolkits to uv broke this.
2025-06-17 13:32:08 -07:00
Eric Gustin
3149058aa1
Release arcade-ai 2.0.0 (#446) 2025-06-17 12:57:44 -07:00
Eric Gustin
093ac56040
Update release containers GH Action (#439)
1. Patch, Minor, or Major is selected during workflow dispatch (defaults
to patch)
2. Get most recent release version
3. Calculate new version based on findings from step 2
4. Build wheels
5. Build worker and base-worker
6. Push to GHCR
7. Create new release with release notes

Also, I removed everything related to ECR
2025-06-17 10:21:08 -07:00
Eric Gustin
2a91ee53ac
Small fixes before arcade-ai v2.0.0 (#437)
As I continue to test the pre-release I will place fixes in this PR
2025-06-16 18:55:11 -07:00
Eric Gustin
3687150c95
Release arcade-ai==2.0.0rc1 to PyPI (#435) 2025-06-13 15:02:05 -07:00
Eric Gustin
d19ef6fbb7
Deploy worker to bosslevel (#433) 2025-06-13 14:09:15 -07:00
Eric Gustin
8a9845b484
PyPI release arcade-serve and arcade-tdk (#432) 2025-06-13 13:06:11 -07:00
Eric Gustin
86cde2d9bd
Add PyPI release workflow (#429)
This is the first of a few PRs. Deploy to staging will fail until we
have `arcade-core`, `arcade-serve`, and `arcade-ai` released to PyPI.
This PR will release `arcade-core` to PyPI.


### PR Description
* Adds workflow that checks for changes in any pyproject.toml, and if
its version has changed, then tests, builds wheel, then publishes to
PyPI
* Updates the Dockerfile for our new structure
* Updates porter yamls
* Updates `make full-dist`
* Removes a couple unused workflows

Check out https://github.com/ArcadeAI/arcade-ai/actions/runs/15622059209
to see how the new workflow works (note that it failed publishing to
PyPI on purpose)
2025-06-13 11:22:31 -07:00
Eric Gustin
7ac6147733
Change versions (#428)
Temporarily changing core, tdk, and serve versions to 1.0.0 so that my
workflow will detect a change to the pyproject.toml version later
2025-06-12 15:38:23 -07:00
Sam Partee
b6b4cd0a4c
🏗️ Restructure: Multi-Package Architecture + uv Migration (#412)
### Overview
Major restructuring from monolithic `arcade-ai` package to modular
library architecture with standardized uv-based dependency management.

![arcade-ai Monorepo
(2)](https://github.com/user-attachments/assets/25f102b0-bb87-4a04-9701-d227d05664b1)

### New Package Structure
- **`arcade-tdk`** - Lightweight toolkit development kit (core
decorators, auth)
- **`arcade-core`** - Core execution engine and catalog functionality  
- **`arcade-serve`** - FastAPI/MCP server components
- **`arcade-ai`** - Meta package that includes CLI functionality.
Optionally include evals via the `evals` extra. Optionally include all
packages via the `all` extra.

### Key Benefits
- **Lighter Dependencies**: Toolkits now depend only on `arcade-tdk` (~2
deps) vs full `arcade-ai` (~30+ deps)
- **Faster Builds**: uv provides 10-100x faster dependency resolution
and installation
- **Better Modularity**: Clear separation of concerns, consumers import
only what they need
- **Standard Tooling**: Eliminates custom poetry scripts, uses standard
Python packaging

### Migration Impact
- All 20 toolkits converted from poetry → uv with `arcade-tdk`
dependencies plus `arcade-ai[evals]` and `arcade-serve` dev
dependencies. When developing locally, devs should install toolkits via
`make install-local`.
- Modern Python 3.10+ type hints throughout
- Standardized build system with hatchling backend
- Enhanced Makefile with robust toolkit management commands
- Removed `arcade dev` CLI command
- Reduce the number of files created by `arcade new` and add an option
to not generate a tests and evals folder.

This foundation enables faster development cycles and cleaner dependency
chains for the growing toolkit ecosystem.

### Todo After this PR is merged
- [ ] Post-merge workflow(s) (release & publish containers, etc)
- [ ] Release order plan. @EricGustin suggests releasing in the
following order:
    1. `arcade-core` version 0.1.0
    2. `arcade-serve` version 0.1.0 and `arcade-tdk` version 0.1.0
    3. `arcade-ai` version 2.0.0
4. Patch release for all toolkits (all changes in toolkits are internal
refactors)
- [ ] [Update docs](https://github.com/ArcadeAI/docs/pull/318)

---------

Co-authored-by: Eric Gustin <eric@arcade.dev>
Co-authored-by: Eric Gustin <34000337+EricGustin@users.noreply.github.com>
2025-06-11 16:48:17 -07:00
Renato Byrro
01a9efcf63
Fix quote issue when deploying worker (2) (#427) 2025-06-11 13:49:48 -03:00
Renato Byrro
5c221dd042
Fix quote issue when deploying worker (#426) 2025-06-11 12:53:45 -03:00
Sterling Dreyer
ab1a2a8d31
Move prod build (#424) 2025-06-11 08:30:18 -07:00
Renato Byrro
a538f4bf81
Jira Toolkit (#407)
Unusually big PR, in large part due to Jira's data model complexities.
2025-06-11 12:06:33 -03:00
Sterling Dreyer
3b50c0bb6e
Add promotion workflow (#422) 2025-06-10 13:12:04 -07:00
porter-deployment-app[bot]
f23d80fdff
Enable Porter Application worker (#423)
Hello 👋 from Porter! Please merge this PR to finish setting up your
application.

---------

Co-authored-by: porter-deployment-app[bot] <87230664+porter-deployment-app[bot]@users.noreply.github.com>
Co-authored-by: sdreyer <sterling@arcade-ai.com>
2025-06-10 13:02:59 -07:00
Sterling Dreyer
268b268044
Build staging from source (#421) 2025-06-10 12:05:00 -07:00
Eric Gustin
bc8814e24f
Add missing dev dependency to two toolkits (#419)
pytest asyncio was missing in dev deps for the reddit toolkit and notion
toolkit. This was causing PR workflows to fail.
2025-06-09 11:06:07 -07:00
porter-deployment-app[bot]
ce95b3abf2
Enable Porter Application worker (#418)
Hello 👋 from Porter! Please merge this PR to finish setting up your
application.

Co-authored-by: porter-deployment-app[bot] <87230664+porter-deployment-app[bot]@users.noreply.github.com>
2025-06-06 17:05:19 -07:00
Shub
0246682a30
fix: update typer dependency to ^0.10.0 to fix Python 3.13 compatibility (#413) 2025-05-29 10:56:03 -04:00
Sterling Dreyer
f8907684b7
Cleanup deploy exceptions (#410) 2025-05-23 17:21:47 -07:00
Evan Tahler
5189a4701b
Shorter Readme (#409)
This repo has a readme that is basically a shadow version of our docs
that we aren't keeping up-to-date. So, let's remove all that and
encourage folks to head to our docs.

---------

Co-authored-by: Nate Barbettini <nate@arcade.dev>
2025-05-23 14:46:42 -07:00
Eric Gustin
6bc6f0c574
Add Confluence toolkit (#406)
12 tools for the new Confluence toolkit.

| Name | Description |

|----------------------------------|------------------------------------------------------------------------------------|
| Confluence.CreatePage | Create a new page at the root of the given
space. |
| Confluence.UpdatePageContent | Update a page's content. |
| Confluence.RenamePage | Rename a page by changing its title. |
| Confluence.GetPage | Retrieve a SINGLE page's content by its ID or
title. |
| Confluence.GetPagesById | Get the content of MULTIPLE pages by their
ID in a single efficient request. |
| Confluence.ListPages | Get the content of multiple pages by their ID.
|
| Confluence.ListAttachments | List attachments in a workspace. |
| Confluence.GetAttachmentsForPage | Get attachments for a page by its
ID or title. |
| Confluence.SearchContent | Search for content in Confluence. |
| Confluence.GetSpace | Get the details of a space by its ID or key. |
| Confluence.ListSpaces | List all spaces sorted by name in ascending
order. |
| Confluence.GetSpaceHierarchy | Retrieve the full hierarchical
structure of a Confluence space as a tree structure.|

### Confluence Clients
Confluence has deprecated most of their V1 endpoints, so most of the
tools use V2. However, we still need a V1 client to support search. The
V1 search API has not been deprecated yet, because there is no V2
equivalent. But we need to be aware in the future for when this
deprecation happens.


### Future work
* Content of pages are returned in the Confluence `storage` format. This
is the format that Confluence uses to store pages internally. We should
understand the storage format more deeply, and write utility function to
transform this format into plain text.
* Better protections against extremely large pages. I've tested up to
6,000 word pages.
* Tools for blog posts
* Tool for getting the children of a page. (`get_space_hierarchy` will
suffice for now)
* Allow for numerical titles
2025-05-22 13:18:19 -07:00
Sam Partee
24758ad35a
DevEx: Hot Reload all installed toolkits on save (#400)
Add hot-reload capability 

adds watchfiles dependency and changes uvicorn server logic
but does not have any breaking changes.

---------

Co-authored-by: Eric Gustin <eric@arcade.dev>
Co-authored-by: sdreyer <sterling@arcade-ai.com>
Co-authored-by: Eric Gustin <34000337+EricGustin@users.noreply.github.com>
2025-05-21 21:50:33 -07:00
Evan Tahler
28637f5543
Revert "Arcade Gateway" (#403)
Reverts ArcadeAI/arcade-ai#401
2025-05-20 14:24:08 -07:00
Evan Tahler
bd1d75970d
Arcade Gateway (#401)
Updating the CLI and Docs to say "gateway" not "engine". I didn't touch
the code
2025-05-16 16:43:08 -07:00
Eric Gustin
e764205e6c
Add Microsoft.ListEmailsByProperty tool (#386) 2025-05-16 13:08:29 -08:00
Sergio Serrano
8d0d77af10
Add Langchain example for our docs. (#399)
These examples are the same we have for Python in our docs.
2025-05-13 20:30:48 -03:00
Sergio Serrano
45b83d3461
Update LangGraph example (#398) 2025-05-12 19:50:18 -03:00
Renato Byrro
b9afa1b5cf
Asana Toolkit (#381) 2025-05-12 14:59:52 -03:00
Sergio Serrano
44d7a23bdd
Add Mastra Integration Example (#397) 2025-05-12 14:35:47 -03:00
Sergio Serrano
dfe3005fe6
Update example with the last version of arcade-js (#396)
Update our example with the latest version of `arcade-js`. This means we
can delete all the utility functions we created here, since we now have
first-class `Zod` support and they are no longer needed.

> [!WARNING]
> Don't merge until this
[PR](https://github.com/ArcadeAI/arcade-js/pull/127) is merged.
2025-05-12 14:02:11 -03:00
Eric Gustin
419a0ac717
Add Outlook Calendar tools (#382) 2025-05-09 13:34:40 -08:00
Sterling Dreyer
c128717e53
Worker status polling (#385)
Changes deployments so that worker status is polled instead of waiting
in a single request to reduce risk of proxy timeouts
2025-05-09 10:43:39 -07:00
Eric Gustin
479d137e62
Lint CONTRIBUTING.md (#395) 2025-05-07 11:08:04 -07:00
Shub
7becf1fbd5
Update CONTRIBUTING.md (#393)
added additional pr guideline for toolkits -- separate pr for each
toolkit change

---------

Co-authored-by: Eric Gustin <34000337+EricGustin@users.noreply.github.com>
2025-05-06 12:36:26 -04:00
Sterling Dreyer
31470f8954
Remove credential requirements from arcade serve (#390) 2025-05-02 16:27:22 -07:00
Sam Partee
02653ff28b
Fix bug in Arcade new (#389) 2025-05-02 14:31:06 -07:00
Renato Byrro
09539db25a
Add Asana class to auth init (#388)
missed this in the previous PR to add asana class
2025-05-02 18:11:50 -03:00
Eric Gustin
2de123f271
Fix local worker toolkit registration (#387)
This PR fixes two bugs:
1. `serve_default_worker` was not registering toolkits to the worker
(non mcp). This caused workers created during `arcade workerup` and
`arcade serve` to have 0 tools.
2. We were logging the number of files in the toolkit as the number of
tools in the toolkit.
2025-05-02 13:38:58 -07:00
Sam Partee
9bc1cd4a12
Support for MCP stdio transport (#368)
MCP stdio Implementation:

The PR adds support for standard input/output (stdio) as a transport
mechanism for the Message Control Protocol. This is a replacement to the
SSE (Server-Sent Events) transport that was worked on in PR #359 but
will not be merged as it's not deprecated.

This will allow developers to use Arcade tools (written by the dev or
Arcade) in Claude, Cursor, windsurf, etc.

The engine Gateway already supports adding HTTPS streamable (replacement
for SSE) MCP servers as tool servers, and will soon support full gateway
capability in the client API as well.

To use any existing Toolkit just 

## Examples

### Quickstart setup with existing toolkits

```bash
pip install arcade-ai
pip install <name of toolkit> # ex. arcade-google
arcade serve --mcp
```

### Run with Claude

Just add the following to the Claude config

```json
{
  "mcpServers": {
    "arcade": {
      "command": "bash",
      "args": ["-c", "export ARCADE_API_KEY=arc_xxxx && /path/to/python /path/to/arcade serve --mcp"]
    }
  }
}
```

### Customizing the Tool Server

Developers can customize their served tools and server furthermore by
importing the worker sdk

```python

import arcade_google  # pip install arcade_google
import arcade_search  # pip install arcade_search

from arcade.core.catalog import ToolCatalog
from arcade.worker.mcp.stdio import StdioServer

# 2. Create and populate the tool catalog
catalog = ToolCatalog()
catalog.add_module(arcade_google)  # Registers all tools in the package
catalog.add_module(arcade_search)


# 3. Main entrypoint
async def main():
    # Create the worker with the tool catalog
    worker = StdioServer(catalog)

    # Run the worker
    await worker.run()


if __name__ == "__main__":
    import asyncio

    asyncio.run(main())
    
 ```
 
 Then to run with claude, just run this python file instead of the prebuilt server used in ``arcade serve --mcp``
2025-05-02 06:27:43 -07:00
Eric Gustin
f5774fd4ae
Add Microsoft toolkit to worker (#384) 2025-04-30 17:27:04 -07:00
Eric Gustin
4466f3eef9
Remove Asana from worker toolkit list (#383)
The Asana toolkit is not published yet, so it cannot be added to the
worker's toolkit list. This is causing container build/publish on main
branch to fail.
2025-04-29 11:22:08 -07:00
Renato Byrro
60c3bbe3fa
Add Asana auth class (#380) 2025-04-29 10:09:21 -07:00
Eric Gustin
817131c6ce
Add arcade dashboard CLI Command (#330)
* `arcade dashboard` opens the Arcade Dashboard in a web browser.
Defaults to `https://api.arcade.dev/dashboard`, but is configurable via
flags.


* `arcade dashboard --local` opens your locally hosted Arcade Dashboard
in a web browser.


* Performs a health check of the engine and will print a warning to the
console if the Engine is not healthy / not running.


----------------------------------------

* Inspiration from https://minikube.sigs.k8s.io/docs/handbook/dashboard/
2025-04-28 10:22:55 -07:00
Eric Gustin
ef886bb503
Microsoft Outlook Mail Tools (#377)
| Name | Description |

|------------------------------|--------------------------------------------------------------------------------|
| Microsoft.CreateDraftEmail | Compose a new draft email in Outlook |
| Microsoft.UpdateDraftEmail | Update an existing draft email in Outlook
|
| Microsoft.CreateAndSendEmail | Create and immediately send a new email
in Outlook to the specified recipients |
| Microsoft.SendDraftEmail | Send an existing draft email in Outlook |
| Microsoft.ReplyToEmail | Reply only to the sender of an existing email
in Outlook |
| Microsoft.ReplyAllToEmail | Reply to all recipients of an existing
email in Outlook |
| Microsoft.ListEmails | List emails in the user's mailbox across all
folders |
| Microsoft.ListEmailsInFolder | List the user's emails in the specified
folder |
2025-04-24 14:27:52 -07:00
Eric Gustin
8f87212058
Notion Toolkit Optimizations (#379)
1. Paginate through all current level blocks before recursing into
children (before this PR we would go back and forth between paginate and
recurse)
2. For top-level blocks only, split blocks into 5 lists, and
concurrently get their content


---------

From my local timing benchmarks, this speeds up the tool call by ~60%
(23 seconds to 9.1 seconds) for larger Notion pages


Without optimization: Avg 22995
Attempt 1: 27503.49497795105
Attempt 2: 20863.977909088135
Attempt 3: 20888.309955596924
Attempt 4: 18574.61714744568
Attempt 5: 27147.75586128235

With optimization: Avg 9148.6
Attempt 1: 9941.372871398926
Attempt 2: 10097.685098648071
Attempt 3: 7855.895042419434
Attempt 4: 9078.719854354858
Attempt 5: 8772.69196510315
2025-04-24 11:03:23 -07:00
Nate Barbettini
e46b985cc9
fix: Typo in Sqrt tool description (#378) 2025-04-23 10:28:12 -03:00
Renato Byrro
3e35c70f85
Update Hubspot toolkit to use Hubspot auth class (#375) 2025-04-22 21:55:39 -03:00