Skip to main content

Unified toolkit for building AI-powered agents — Google, Microsoft, social media, productivity, and more

Project description

talon-tools logo

talon-tools

Unified Python toolkit for building AI-powered agents
Google · Microsoft · Atlassian · Notion · Spotify · X · Facebook · and more

MIT License Python 3.11+


What is this?

talon-tools provides a batteries-included set of tool modules for AI agents. Each module wraps a service API and exposes a standard build_tools() -> list[Tool] interface that plugs into any LLM agent framework.

Features:

  • Multi-service: Google Workspace, Microsoft 365, Atlassian, Notion, Spotify, X, Facebook, ServiceNow, web search, file system, terminal
  • Credential management: Pluggable storage (.env, YAML, env vars, custom backends)
  • Interactive onboarding: python -m talon_tools.cli setup walks through OAuth flows, cookie extraction, and credential entry
  • Modular installs: Only install what you need via pip extras

Install

pip install talon-tools          # core only
pip install talon-tools[google]  # with Google integrations
pip install talon-tools[all]     # everything

Requires Python 3.11+.

Modules

Module Extra Description
credentials (core) Unified credential manager — .env, YAML, or custom backend
atlassian [atlassian] Jira & Confluence API client
google [google] Gmail, Calendar, Drive, Sheets, Keep, Contacts, Photos, YouTube
microsoft [microsoft] Outlook, Teams, Calendar via Microsoft Graph
notion [notion] Notion pages & databases
servicenow [servicenow] ServiceNow incidents & change requests
facebook [facebook] Facebook session-based automation
x [x] X (Twitter) API
spotify [spotify] Spotify playback & library
search [search] Web search via DuckDuckGo
docreader [docreader] PDF, Excel, Word, PowerPoint parsing
mcp [mcp] Model Context Protocol client
terminal (core) Shell command execution
workspace (core) File system operations

Setup

Interactive setup walks you through credentials for each service:

python -m talon_tools.cli setup          # all tools
python -m talon_tools.cli setup google   # just Google
python -m talon_tools.cli setup x        # just X

Features:

  • Automatic OAuth flows (Google, Microsoft, Spotify)
  • Browser cookie extraction (X, Facebook)
  • Signal: auto-downloads signal-cli + Java to ~/.config/talon/
  • Falls back to manual entry if automation fails
  • Configurable credential storage (.env or YAML)

Credentials

from talon_tools.credentials import configure_storage, get, set_credential

# .env file
configure_storage("env", path=".env")

# YAML file
configure_storage("yaml", path="credentials.yaml")

# Custom path (format auto-detected from extension)
configure_storage("/path/to/secrets.env")

Lookup order: file store → environment variables (env vars always work as fallback/override).

.env format

JIRA_URL=https://yourcompany.atlassian.net
JIRA_USERNAME=you@company.com
JIRA_API_TOKEN=your-api-token
NOTION_TOKEN=secret_abc123

YAML format

jira:
  url: https://yourcompany.atlassian.net
  username: you@company.com
  api_token: your-api-token

notion:
  token: secret_abc123

Nested YAML keys auto-flatten: jira.urlJIRA_URL.

See credentials.yaml.example for all available keys.

Quick Start

API client

import asyncio
from talon_tools.atlassian.client import JiraClient
from talon_tools import credentials

credentials.configure_storage("env", path=".env")

async def main():
    jira = JiraClient()
    me = await jira.myself()
    print(f"Logged in as: {me['displayName']}")

    issues = await jira.search("assignee = currentUser()", limit=5)
    for issue in issues["issues"]:
        print(f"  {issue['key']}: {issue['fields']['summary']}")

asyncio.run(main())

Agent tools

Each module exposes build_tools() -> list[Tool] — ready for any LLM agent loop:

from talon_tools.atlassian.tools import build_tools as jira_tools
from talon_tools.notion.tools import build_tools as notion_tools

# Collect tools from the modules you need
tools = jira_tools() + notion_tools()

# Tools are async callables: tool.handler({"jql": "..."}) -> ToolResult
for tool in tools:
    print(f"  {tool.name}: {tool.description}")

Dynamic skill loading

import importlib
from talon_tools import Tool

def load_skills(skill_names: list[str]) -> list[Tool]:
    tools = []
    for name in skill_names:
        module = importlib.import_module(f"talon_tools.{name}.tools")
        tools.extend(module.build_tools())
    return tools

tools = load_skills(["atlassian", "notion", "search"])

Custom tool

from talon_tools import Tool, ToolResult

async def greet(args: dict) -> ToolResult:
    name = args.get("name", "world")
    return ToolResult(content=f"Hello, {name}!")

def build_tools() -> list[Tool]:
    return [
        Tool(
            name="greet",
            description="Greet someone by name.",
            parameters={
                "type": "object",
                "properties": {
                    "name": {"type": "string", "description": "Name to greet."},
                },
            },
            handler=greet,
        )
    ]

Development

git clone https://github.com/bingkil/talon-tools.git
cd talon-tools
pip install -e ".[all]"

Project structure

talon_tools/
├── credentials.py         # Credential management
├── cli.py                 # Interactive setup CLI
├── types.py               # Tool/ToolResult base types
├── provider.py            # LLM provider interface
├── onboarding/            # Shared onboarding utilities
│   ├── base.py            # OnboardingStep/ToolOnboarding types
│   ├── registry.py        # Auto-discovery of tool onboardings
│   ├── installer.py       # Binary dependency installer
│   └── cookies.py         # Browser cookie extraction
├── google/                # Google Workspace tools
├── microsoft/             # Microsoft 365 tools
├── atlassian/             # Jira & Confluence tools
├── notion/                # Notion tools
├── spotify/               # Spotify tools
├── x/                     # X (Twitter) tools
├── facebook/              # Facebook tools
├── search/                # Web search tools
├── docreader/             # Document parsing tools
├── mcp/                   # MCP client
├── terminal/              # Shell execution tools
└── workspace/             # File system tools

Adding a new tool module

  1. Create talon_tools/myservice/tools.py with build_tools() -> list[Tool]
  2. Create talon_tools/myservice/onboarding.py with get_onboarding() -> ToolOnboarding
  3. Add the import to talon_tools/onboarding/registry.py
  4. Add optional deps to pyproject.toml under [project.optional-dependencies]

Contributing

Contributions welcome! Please:

  1. Fork the repo
  2. Create a feature branch
  3. Make your changes
  4. Run the setup CLI to test: python -m talon_tools.cli setup
  5. Open a PR

License

MIT

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

talon_tools-0.1.0.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

talon_tools-0.1.0-py3-none-any.whl (133.1 kB view details)

Uploaded Python 3

File details

Details for the file talon_tools-0.1.0.tar.gz.

File metadata

  • Download URL: talon_tools-0.1.0.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for talon_tools-0.1.0.tar.gz
Algorithm Hash digest
SHA256 442e0c3ed6a02ccbc2705008cf9942b8578eee62e7888bb1e02ed7b875b86bc1
MD5 433d8b8a75baf518e226811bedf26f3f
BLAKE2b-256 95433ba70fe72f385a3682869f97dfb387ddebb7a4ac94b1a864ce1160f4f385

See more details on using hashes here.

File details

Details for the file talon_tools-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: talon_tools-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 133.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for talon_tools-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e3e686dd447a3cf393ae297aa04f22527dd5de797e128c2cb054d1f97531f3e9
MD5 9bc7e3fba7b2a265b682a752807425cc
BLAKE2b-256 21551b4a92f95110eb646efc3df3c48ffc0ae88e3272b0824f2807fbc7177676

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page