Python client + CLI + MCP server for Billbird's REST API.
Project description
billbird-client
Python client, CLI, and MCP server for Billbird's REST API.
Standalone. No Gitsweeper, no opinion about analytics — just a focused tool for reading time-tracking data out of one Billbird instance over its bearer-token API.
Install
uv add billbird-client # in a uv-managed project
# or
pip install billbird-client
Configure
export BILLBIRD_API_URL=https://billbird.example.com
export BILLBIRD_API_TOKEN=bb_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Generate the token in Billbird's admin panel under API tokens. See Billbird's docs for the lifecycle.
CLI
billbird-cli hours --period last-7d --group-by user
billbird-cli hours --period 2026-05 --group-by client
billbird-cli pva --status over # plan-vs-actual outliers
billbird-cli recent --since 2026-05-20T00:00:00Z
Every command takes --json for machine-readable output. See docs/cli.md for the full reference.
MCP server
For AI clients (Claude Desktop and similar):
billbird-mcp
The server speaks JSON-RPC over stdio. Tools exposed:
billbird_hours_summary(period, group_by, repo?, client?, user?)billbird_plan_vs_actual(period?, status?, repo?, client?)billbird_recent_activity(since, limit?)billbird_cycle_time(period?, repo?)— stub until Billbird exposes the endpoint
See docs/mcp.md for Claude Desktop configuration and the read-only contract.
Library
For programmatic use:
from billbird_client import BillbirdClient
with BillbirdClient.from_env() as client:
entries = client.time_entries(repository="org/repo")
plans = client.plans(status="active")
pva = client.plan_vs_actual("org", "repo", 42)
Scope
This package is read-only. Writes happen in GitHub via slash commands (/log, /plan, etc.) and land in Billbird through its webhook. There is no billbird-cli log 2h — that would be a separate command path with separate security implications, and slash commands already work everywhere gh works.
This package has no dependency on Gitsweeper. Gitsweeper may consume this package for cross-source analytics (e.g. reconciling commit Time: footers against /log entries), but Billbird and billbird-client work fine without it.
License
MIT.
Project details
Release history Release notifications | RSS feed
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 billbird_client-0.1.0.tar.gz.
File metadata
- Download URL: billbird_client-0.1.0.tar.gz
- Upload date:
- Size: 67.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
134f52437541f39ae528f668260e085e9bef93efc1354635f77eb205e1a538b2
|
|
| MD5 |
a18fc695874bd7dc28a79392a266046c
|
|
| BLAKE2b-256 |
d16d9ba65d9e4d33b7ea10f5e757ce8799ab994d88fede1b80b13ebe9ac591df
|
Provenance
The following attestation bundles were made for billbird_client-0.1.0.tar.gz:
Publisher:
release.yml on MWest2020/billbird-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
billbird_client-0.1.0.tar.gz -
Subject digest:
134f52437541f39ae528f668260e085e9bef93efc1354635f77eb205e1a538b2 - Sigstore transparency entry: 1602108496
- Sigstore integration time:
-
Permalink:
MWest2020/billbird-client@8ce0b56b2ba90a6877ebd6642bb58aceed159625 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/MWest2020
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8ce0b56b2ba90a6877ebd6642bb58aceed159625 -
Trigger Event:
push
-
Statement type:
File details
Details for the file billbird_client-0.1.0-py3-none-any.whl.
File metadata
- Download URL: billbird_client-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a01cc2e4458a76c5c38f6f04f7fa3726f5a8f4d5c86f74c0d5a5351c4d8234b3
|
|
| MD5 |
07484b43d7f2f2bec7235ed2f3934b90
|
|
| BLAKE2b-256 |
605701512a607366c4d96175bac11a3359cc4cd2f6d8d612509b9ba397cc9512
|
Provenance
The following attestation bundles were made for billbird_client-0.1.0-py3-none-any.whl:
Publisher:
release.yml on MWest2020/billbird-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
billbird_client-0.1.0-py3-none-any.whl -
Subject digest:
a01cc2e4458a76c5c38f6f04f7fa3726f5a8f4d5c86f74c0d5a5351c4d8234b3 - Sigstore transparency entry: 1602108507
- Sigstore integration time:
-
Permalink:
MWest2020/billbird-client@8ce0b56b2ba90a6877ebd6642bb58aceed159625 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/MWest2020
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8ce0b56b2ba90a6877ebd6642bb58aceed159625 -
Trigger Event:
push
-
Statement type: