Metadata-Version: 2.4
Name: toolfront
Version: 0.3.1
Summary: ToolFront helps you retrieve information from large databases, APIs, and documents with AI.
Author-email: Esteban Safranchik <esteban@kruskal.ai>, Gavin Chan <gavin@kruskal.ai>
License: MIT
Project-URL: Homepage, https://github.com/statespace-ai/toolfront
Project-URL: Repository, https://github.com/statespace-ai/toolfront
Project-URL: Documentation, https://docs.toolfront.ai
Project-URL: Bug Tracker, https://github.com/statespace-ai/toolfront/issues
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click>=8.1.8
Requires-Dist: httpx>=0.28.1
Requires-Dist: mcp[cli]>=1.9.0
Requires-Dist: pydantic>=2.11.4
Requires-Dist: pytest>=8.3.5
Requires-Dist: pydantic-ai>=0.4.2
Requires-Dist: rich>=14.0.0
Requires-Dist: duckdb>=1.3.2
Requires-Dist: fsspec>=2025.7.0
Requires-Dist: ibis-framework>=10.8.0
Requires-Dist: tabulate>=0.9.0
Provides-Extra: test
Requires-Dist: pytest>=7.0.0; extra == "test"
Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
Provides-Extra: dev
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Requires-Dist: mkdocs-material[imaging]>=9.6.16; extra == "dev"
Requires-Dist: mkdocstrings[python]>=0.30.0; extra == "dev"
Provides-Extra: bigquery
Requires-Dist: ibis-framework[bigquery]>=10.6.0; extra == "bigquery"
Provides-Extra: clickhouse
Requires-Dist: ibis-framework[clickhouse]>=10.6.0; extra == "clickhouse"
Provides-Extra: databricks
Requires-Dist: ibis-framework[databricks]>=10.6.0; extra == "databricks"
Provides-Extra: druid
Requires-Dist: ibis-framework[druid]>=10.6.0; extra == "druid"
Provides-Extra: duckdb
Requires-Dist: ibis-framework[duckdb]>=10.6.0; extra == "duckdb"
Provides-Extra: flink
Requires-Dist: ibis-framework[flink]>=10.6.0; extra == "flink"
Provides-Extra: mssql
Requires-Dist: ibis-framework[mssql]>=10.6.0; extra == "mssql"
Provides-Extra: mysql
Requires-Dist: ibis-framework[mysql]>=10.6.0; extra == "mysql"
Provides-Extra: oracle
Requires-Dist: ibis-framework[oracle]>=10.6.0; extra == "oracle"
Provides-Extra: postgres
Requires-Dist: ibis-framework[postgres]>=10.6.0; extra == "postgres"
Provides-Extra: risingwave
Requires-Dist: ibis-framework[risingwave]>=10.6.0; extra == "risingwave"
Provides-Extra: snowflake
Requires-Dist: ibis-framework[snowflake]>=10.6.0; extra == "snowflake"
Provides-Extra: sqlite
Requires-Dist: ibis-framework[sqlite]>=10.6.0; extra == "sqlite"
Provides-Extra: trino
Requires-Dist: ibis-framework[trino]>=10.6.0; extra == "trino"
Provides-Extra: pyspark
Requires-Dist: ibis-framework[pyspark]>=10.6.0; extra == "pyspark"
Provides-Extra: all
Requires-Dist: toolfront[bigquery]; extra == "all"
Requires-Dist: toolfront[clickhouse]; extra == "all"
Requires-Dist: toolfront[databricks]; extra == "all"
Requires-Dist: toolfront[druid]; extra == "all"
Requires-Dist: toolfront[duckdb]; extra == "all"
Requires-Dist: toolfront[mssql]; extra == "all"
Requires-Dist: toolfront[mysql]; extra == "all"
Requires-Dist: toolfront[oracle]; extra == "all"
Requires-Dist: toolfront[postgres]; extra == "all"
Requires-Dist: toolfront[pyspark]; extra == "all"
Requires-Dist: toolfront[risingwave]; extra == "all"
Requires-Dist: toolfront[snowflake]; extra == "all"
Requires-Dist: toolfront[sqlite]; extra == "all"
Requires-Dist: toolfront[trino]; extra == "all"
Dynamic: license-file

<p align="center">
  <a href="https://github.com/statespace-ai/toolfront">
    <img src="https://raw.githubusercontent.com/statespace-ai/toolfront/main/img/logo.png" width="150" alt="ToolFront Logo">
  </a>
</p>

<div align="center">

*Data environments for AI agents*

[![Test Suite](https://github.com/statespace-ai/toolfront/actions/workflows/test.yml/badge.svg)](https://github.com/statespace-ai/toolfront/actions/workflows/test.yml)
[![PyPI package](https://img.shields.io/pypi/v/toolfront?color=%2334D058&label=pypi%20package)](https://pypi.org/project/toolfront/)
[![Discord](https://img.shields.io/discord/1323415085011701870?label=Discord&logo=discord&logoColor=white&style=flat-square)](https://discord.gg/rRyM7zkZTf)
[![X](https://img.shields.io/badge/ToolFront-black?style=flat-square&logo=x&logoColor=white)](https://x.com/statespace_ai)

</div>

---

**Documentation: [docs.toolfront.ai](http://docs.toolfront.ai/)**

**Source code: [https://github.com/statespace-ai/toolfront](https://github.com/statespace-ai/toolfront)**

---

## Installation

Install `toolfront` with `pip` or your favorite PyPI package manager.

```bash
pip install toolfront
```

## Quickstart

ToolFront helps you build and deploy environments for AI agents. Think of environments as interactive directories that agents can explore and take actions in.

```markdown
environment
├── index.md
├── page/
│   ├── cli.py
│   └── index.md
└── data/
    ├── sample.txt
    └── data.csv
```

To add actions to an environment, simply define commands in any markdown header. As agents browse files, they will discover these tools and learn how to use them with the `--help` flag.

```markdown
---
tools:
- [python3, cli.py]
- [curl, -X, GET, https://api.example.com/data]

---

# My environment page

Add [links](./page_1) to tell your agents what pages they should check out.

Agents can call any command defined in markdown headers.
- `python3 cli.py` executes a python script
- `curl -X GET https://api.example.com/data` calls an API
```

You can launch browsing sessions with ToolFront's Python SDK, or build your own browsing agent with the MCP. Browsing is always powered by your own models.

### Using the SDK

```python
from toolfront import Browser

browser = Browser(model="openai:gpt-5")

url = "file:///path/to/environment"

answer = browser.ask("What's our average ticket price?", url=url)
print(answer)
```

### Using MCP

```json
{
  "mcpServers": {
    "toolfront": {
      "command": "uvx",
      "args": ["toolfront", "mcp", "file:///path/to/toolsite"]
    }
  }
}
```

ToolFront comes with six core tools* your agents can use to interact with environments:

- **`run_command`** - Execute commands defined in markdown headers
- **`read`** - Get the content of a specific page or file
- **`glob`** - List files matching a pattern
- **`tree`** - View directory structure
- **`grep`*** - Find relevant lines that match a regular expression
- **`search`*** - Find relevant documents containing a list of terms

\* *`grep` and `search` require indexing environments.*

## ToolFront Cloud

Instantly deploy your environments with **ToolFront Cloud**.

```bash
toolfront deploy ./path/to/environment --api-key "my-api-key"
```

Would give you a secure environment URL your agents can browse.

```python
from toolfront import Browser

browser = Browser(params={"TOOLFRONT_API_KEY": "my-api-key"})

answer = browser.ask(..., url="https://cloud.toolfront.ai/user/environment")
```

Environments deployed to **ToolFront Cloud** are automatically indexed and get access to `grep` and `search` tools.

**ToolFront Cloud** is currently in open beta. To request access, join our [Discord](https://discord.gg/rRyM7zkZTf) or email `esteban[at]kruskal[dot]ai`.


## Community & Contributing

- **Discord**: Join our [community server](https://discord.gg/rRyM7zkZTf) for real-time help and discussions
- **X**: Follow us [@toolfront](https://x.com/toolfront) for updates and news
- **Issues**: Report bugs or request features on [GitHub Issues](https://github.com/statespace-ai/toolfront/issues)

## License

This project is licensed under the terms of the MIT license.
