Skip to main content

invoq-acp

Python SDK for the Agent Capability Protocol (ACP)

Build ACP-compliant agents in 20 minutes. Register them on invoq.me and they can coordinate with any other agent in the directory.

Quickstart

pip install invoq-acp
from invoq_acp import ACPAgent, AgentCard, AgentSkill, serve
from invoq_acp.methods import (
    ScheduleProposal, ScheduleProposalResponse,
    SlotAvailability,
)

class MyAgent(ACPAgent):
    async def on_schedule_propose(self, proposal: ScheduleProposal) -> ScheduleProposalResponse:
        return ScheduleProposalResponse(
            agent_id=self.card.agent_id,
            availability=[
                SlotAvailability(slot=s, available=True, preference=1)
                for s in proposal.proposed_slots
            ],
            message="All slots work for me!",
        )

agent = MyAgent(
    card=AgentCard(
        agent_id="agent-my-first",
        name="My First Agent",
        endpoint="https://agent-my-first.invoq.me",
        skills=[
            AgentSkill(name="scheduling", description="I can schedule meetings",
                       methods=["agent.schedule.propose"])
        ],
    )
)

serve(agent, port=8080)

Your agent is now live at:

  • GET /.well-known/agent.json — discoverable by any ACP agent
  • POST /acp/v1/rpc — receives JSON-RPC 2.0 calls
  • GET /acp/v1/events — SSE stream for real-time events

ACP Methods

Method Description Override
agent.discover Returns agent capabilities Built-in
agent.schedule.propose Propose meeting time slots on_schedule_propose()
agent.schedule.confirm Confirm a meeting on_schedule_confirm()
agent.workflow.vote Yes/no decision request on_workflow_vote()
agent.remind.set Cross-agent reminder on_remind_set()
agent.context.share Share MCP-compatible context on_context_share()

Calling Other Agents

# Discover another agent
card = await agent.discover("https://agent-other.invoq.me")

# Propose a meeting
from invoq_acp.methods import ScheduleProposal, TimeSlot
result = await agent.propose_schedule(
    "https://agent-other.invoq.me",
    ScheduleProposal(
        title="Team sync",
        proposed_slots=[TimeSlot(start=..., end=...)],
        participants=["agent-my-first", "agent-other"],
    )
)

# Request a vote
from invoq_acp.methods import WorkflowVote
result = await agent.request_vote(
    "https://agent-other.invoq.me",
    WorkflowVote(question="Approve Q2 budget?", deadline=...)
)

Examples

Architecture

┌─────────────────────────────────────────┐
│  Your Agent (subclass ACPAgent)         │
├─────────────────────────────────────────┤
│  invoq_acp SDK                          │
│  ├── AgentCard    → /.well-known/       │
│  ├── RPCDispatch  → /acp/v1/rpc        │
│  ├── SSE Server   → /acp/v1/events     │
│  └── HTTP Client  → call other agents   │
├─────────────────────────────────────────┤
│  Starlette + Uvicorn                    │
├─────────────────────────────────────────┤
│  HTTPS / HTTP/2 + TLS                   │
└─────────────────────────────────────────┘

Protocol Reference

Full specification: invoq.me/protocol

License

MIT

Metadata

Release files for invoq-acp 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for invoq-acp 0.2.3
File Size Uploaded Provenance Actions
invoq_acp-0.2.3.tar.gz 90.7 kB With provenance Details for invoq_acp-0.2.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for invoq-acp 0.2.3
File Interpreter ABI Platform Actions
invoq_acp-0.2.3-py3-none-any.whl Python 3 none any Details for invoq_acp-0.2.3-py3-none-any.whl

Total release size: 169.7 kB

Release files / invoq_acp-0.2.3.tar.gz

Download URL invoq_acp-0.2.3.tar.gz
Size 90.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3d64ce6c5b260e966c60e96f4326fbf27a934daecbc43e715610664c9ac207fb
BLAKE2b-256 checksum
How to use checksums
c726d4282726d3cb79659604c0dcda8edb3a0de1383b091109a0cb7a85f8fc91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / invoq_acp-0.2.3-py3-none-any.whl

Download URL invoq_acp-0.2.3-py3-none-any.whl
Size 79.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
882bcfa6c5cb83e6707a8d4391db005ac9577a742ef44af5d2b4967212dcda9c
BLAKE2b-256 checksum
How to use checksums
ab563015b5c983b115702c807edfc59feabc02be85ba1a2218d19b7f86ba22cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Security for invoq-acp 0.2.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for invoq_acp-0.2.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.3 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page