Wrap any agent function in a production-ready A2A server
Project description
pgns-agent
Express.js for A2A agents.
Wrap any agent function in a production-ready A2A-compatible server, powered by pgns.
from pgns_agent import AgentServer
agent = AgentServer("my-agent", "Echoes input")
@agent.on_task
async def handle(task):
return {"echo": task.input}
agent.listen(3000)
Quickstart
Install:
pip install pgns-agent
Configure (optional — omit for local dev mode):
export PGNS_API_KEY="your-api-key"
Run:
python agent.py
Your agent is now live. Verify the agent card at http://localhost:3000/.well-known/agent.json.
Features
- A2A protocol compliance — serves the standard Agent Card at
/.well-known/agent.json - Auto-provisioning — registers an agent card and roost on the pgns relay at startup
- Sync + async modes — handlers are always async, but the server can run standalone or embedded
- SSE streaming — stream task progress updates to callers via Server-Sent Events
- Task lifecycle —
submitted → working → completed/failedwith full status tracking - Input-required flow — suspend a handler and request additional input from the caller
- Local dev mode — run without a pgns API key for local development and testing
Three entry points
Standalone server — start a self-contained HTTP server:
agent.listen(3000)
Mount into an existing app — get a Starlette/ASGI application to compose with FastAPI, Starlette, or any ASGI framework:
app = agent.app()
Serverless handler — get the raw ASGI callable for Lambda, Cloud Functions, etc.:
handler = agent.handler()
Framework adapters
Adapters let you wire existing agent frameworks into pgns-agent with zero glue code.
LangChain / LangGraph
pip install pgns-agent-langchain
from pgns_agent import AgentServer
from pgns_agent.adapters import LangChainAdapter
agent = AgentServer("my-langchain-agent", "Runs a LangChain chain")
agent.use(LangChainAdapter(my_runnable))
agent.listen(3000)
OpenAI Agents SDK
pip install pgns-agent-openai
Claude Agent SDK
pip install pgns-agent-claude
CrewAI
pip install pgns-agent-crewai
Testing
Use the built-in test client for unit testing — no server required:
client = agent.test_client()
resp = client.send_task({"text": "hello"})
assert resp.status == "completed"
assert resp.result == {"echo": {"text": "hello"}}
Documentation
Full documentation is available at docs.pgns.io/libraries/pgns-agent.
License
Apache 2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pgns_agent-0.1.4.tar.gz.
File metadata
- Download URL: pgns_agent-0.1.4.tar.gz
- Upload date:
- Size: 40.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e14657b4f4325e5a99b39b7223489f460c3ad2daec9d79252e0f529c026cffb3
|
|
| MD5 |
df7f8c9ef72c3c6f73a456bbb4fd8768
|
|
| BLAKE2b-256 |
62b50d5673a53981553b7445dab96ce9428827b54d9251fce18d60b36389e7b8
|
File details
Details for the file pgns_agent-0.1.4-py3-none-any.whl.
File metadata
- Download URL: pgns_agent-0.1.4-py3-none-any.whl
- Upload date:
- Size: 27.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3aa5fd90cabbdbc6ec21130b891b6fa785a6b64b710907084bf57c02b329a36c
|
|
| MD5 |
07b94f5c5fdb2582fafdec7368c50007
|
|
| BLAKE2b-256 |
7fe4727c463b470fe35c90d9b8776ee0f21494853cf094b2076d9a3d5259ed3e
|