A full toolkit for running an AI agent service built with LangGraph, FastAPI and Streamlit.
It includes a LangGraph agent, a FastAPI service to serve it, a client to interact with the service, and a Streamlit app that uses the client to provide a chat interface. Data structures and settings are built with Pydantic.
This project offers a template for you to easily build and run your own agents using the LangGraph framework. It demonstrates a complete setup from agent definition to user interface, making it easier to get started with LangGraph-based projects by providing a full, robust toolkit.
🎥 Watch a video walkthrough of the repo and app
Run directly in python
# At least one LLM API key is required
echo 'OPENAI_API_KEY=your_openai_api_key' >> .env
# uv is the recommended way to install agent-service-toolkit, but "pip install ." also works
# For uv installation options, see: https://docs.astral.sh/uv/getting-started/installation/
curl -LsSf https://astral.sh/uv/0.11.26/install.sh | sh
# Install dependencies. "uv sync" creates .venv automatically
uv sync --frozen
source .venv/bin/activate
python src/run_service.py
# In another shell
source .venv/bin/activate
streamlit run src/streamlit_app.py
Run with docker
echo 'OPENAI_API_KEY=your_openai_api_key' >> .env
docker compose watch

interrupt(), flow control with Command, long-term memory with Store, and langgraph-supervisor./infoThe repository is structured as follows:
src/agents/: Defines several agents with different capabilitiessrc/schema/: Defines the protocol schemasrc/core/: Core modules including LLM definition and settingssrc/service/service.py: FastAPI service to serve the agentssrc/client/client.py: Client to interact with the agent servicesrc/streamlit_app.py: Streamlit app providing a chat interfacetests/: Unit and integration testssh
git clone https://github.com/JoshuaC215/agent-service-toolkit.git
cd agent-service-toolkit
Set up environment variables:
Create a .env file in the root directory. At least one LLM API key or configuration is required. See the .env.example file for a full list of available environment variables, including a variety of model provider API keys, header-based authentication, LangSmith tracing, testing and development modes, and OpenWeatherMap API key.
You can now run the agent service and the Streamlit app locally, either with Docker or just using Python. The Docker setup is recommended for simpler environment setup and immediate reloading of the services when you make changes to your code.
To customize the agent for your own use case:
src/agents directory. You can copy research_assistant.py or chatbot.py and modify it to change the agent's behavior and tools.agents dictionary in src/agents/agents.py. Your agent can be called by /<your_agent_name>/invoke or /<your_agent_name>/stream.src/streamlit_app.py to match your agent's capabilities.If your agents or chosen LLM require file-based credential files or certificates, the privatecredentials/ has been provided for your development convenience. All contents, excluding the .gitkeep files, are ignored by git and docker's build process. See Working with File-based Credentials for suggested use.
This project includes a Docker setup for easy development and deployment. The compose.yaml file defines three services: postgres, agent_service and streamlit_app. The Dockerfile for each service is in their respective directories.
For local development, we recommend using docker compose watch. This feature allows for a smoother development experience by automatically updating your containers when changes are detected in your source code.
Make sure you have Docker and Docker Compose (>= v2.23.0) installed on your system.
Create a .env file from the .env.example. At minimum, you need to provide an LLM API key (e.g., OPENAI_API_KEY).
sh
cp .env.example .env
# Edit .env to add your API keys
Build and launch the services in watch mode:
sh
docker compose watch
This will automatically: - Start a PostgreSQL database service that the agent service connects to - Start the agent service with FastAPI - Start the Streamlit app for the user interface
NOTE: If you make changes to the pyproject.toml or uv.lock files, you will need to rebuild the services by running docker compose up --build.
Access the Streamlit app by navigating to http://localhost:8501 in your web browser.
The agent service API will be available at http://0.0.0.0:8080. You can also use the OpenAPI docs at http://0.0.0.0:8080/redoc.
Use docker compose down to stop the services.
This setup allows you to develop and test your changes in real-time without manually restarting the services.
The repo includes a generic src/client/client.AgentClient that can be used to interact with the agent service. This client is designed to be flexible and can be used to build other apps on top of the agent. It supports both synchronous and asynchronous invocations, and streaming and non-streaming requests.
See the src/run_client.py file for full examples of how to use the AgentClient. A quick example:
from client import AgentClient
client = AgentClient()
response = client.invoke("Tell me a brief joke?")
response.pretty_print()
# ================================== Ai Message ==================================
#
# A man walked into a library and asked the librarian, "Do you have any books on Pavlov's dogs and Schrödinger's cat?"
# The librarian replied, "It rings a bell, but I'm not sure if it's here or not."
The agent supports LangGraph Studio, the IDE for developing agents in LangGraph.
langgraph-cli[inmem] is installed with uv sync. You can simply add your .env file to the root directory as described above, and then launch LangGraph Studio with langgraph dev. Customize langgraph.json as needed. See the local quickstart to learn more.
You can also run the agent service and the Streamlit app locally without Docker, just using a Python virtual environment.
sh
uv sync --frozen
source .venv/bin/activate
sh
python src/run_service.py
sh
streamlit run src/streamlit_app.py
http://localhost:8501).The following are a few of the public projects that drew code or inspiration from this repo.
Please create a pull request editing the README or open a discussion with any new ones to be added! Would love to include more projects.
Contributions are welcome! Please feel free to submit a Pull Request. Currently the tests need to be run using the local development without Docker setup. To run the tests for the agent service:
Ensure you're in the project root directory and have activated your virtual environment.
Install the development dependencies and pre-commit hooks:
sh
uv sync --frozen
pre-commit install
sh
pytest
This project is licensed under the MIT License - see the LICENSE file for details.
$ claude mcp add agent-service-toolkit \
-- python -m otcore.mcp_server <graph>