arcade-mcp/libs/arcade-serve
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
..
arcade_serve 🏗️ Restructure: Multi-Package Architecture + uv Migration (#412) 2025-06-11 16:48:17 -07:00
pyproject.toml Add PyPI release workflow (#429) 2025-06-13 11:22:31 -07:00
README.md 🏗️ Restructure: Multi-Package Architecture + uv Migration (#412) 2025-06-11 16:48:17 -07:00

Arcade Serve

Serving infrastructure for Arcade tools and workers.

Overview

Arcade Serve provides the infrastructure for serving Arcade tools:

  • FastAPI Worker: High-performance FastAPI-based worker implementation
  • MCP Server: Model Context Protocol server for tool integration
  • Core Abstractions: Base worker classes and components
  • Authentication: Auth utilities and routing
  • Runtime Management: Tool execution and lifecycle management

Installation

pip install arcade-serve

Usage

FastAPI Worker

from arcade_serve import FastAPIWorker

# Create a FastAPI worker
worker = FastAPIWorker()

# Add tools to the worker
worker.add_toolkit("path/to/toolkit")

# Start the server
worker.start(host="0.0.0.0", port=8000)

MCP Server

from arcade_serve import StdioServer

# Create an MCP server
server = StdioServer()

# Add tools
server.add_toolkit("path/to/toolkit")

# Start the server
server.run()

Custom Worker

from arcade_serve import BaseWorker, WorkerComponent

class MyWorker(BaseWorker):
    def __init__(self):
        super().__init__()
        self.add_component(MyCustomComponent())

    async def handle_request(self, request):
        # Custom request handling
        return await super().handle_request(request)

License

MIT License - see LICENSE file for details.