Skip to main content

Tine

A branching notebook runtime for AI and humans.

Tine is a local-first execution engine where notebooks branch like code. Run work in the browser, connect an agent through MCP, and keep both attached to the same fast local runtime.

Tine gives AI agents a safe place to explore multiple paths in parallel while you keep the browser view over the same local state, logs, and results.

What Tine is

Tine is built around a tree-native notebook model:

  • an experiment is the main working unit
  • an experiment contains branches
  • branches contain cells

Each experiment owns its own execution environment and kernel. Execution happens against branches and cells inside that experiment, which makes it practical to explore multiple paths without collapsing everything into one linear notebook.

In practice, that gives Tine a few important properties:

  • local-first execution
  • branch-aware notebook workflows
  • reproducible runtime ownership
  • one backend shared by the UI and MCP

Product shape

Tine has a simple surface model:

  • Web UI for people
  • Local Rust server as the canonical backend
  • Python MCP layer for agent integrations

The UI and MCP are adapters over the same local system rather than separate runtimes.

Quick start

The release-oriented install path is:

pip install tine

Then start the local server for your workspace:

tine serve --workspace . --bind 127.0.0.1:9473 --open

If you want to sanity-check the install first:

tine doctor

Open the app at:

http://127.0.0.1:9473

That install gives you:

  • tine as the public wrapper entrypoint
  • tine mcp ... for MCP config and stdio adapter commands
  • tine-mcp as a compatibility alias for the MCP adapter

On first use, the wrapper resolves a matching Tine engine binary for your OS and architecture.

Supported release targets today:

OS Architectures
macOS Apple Silicon, Intel
Linux x86_64, arm64
Windows x86_64

The server is the canonical local backend. Both the web UI and MCP connect to that same API.

If you do not want the browser to open automatically:

tine serve --workspace . --bind 127.0.0.1:9473

MCP setup

Tine supports agent workflows through MCP.

The intended flow is:

  1. start the local Tine server
  2. configure a host to launch tine mcp serve
  3. let the MCP adapter talk to the same local API used by the UI

The standard MCP stdio command is:

tine mcp serve --api-url http://127.0.0.1:9473

tine-mcp --api-url http://127.0.0.1:9473 is also supported, but tine mcp serve is the preferred public form.

Host path caveat

Some GUI hosts do not inherit the same PATH as your interactive shell.

On macOS this matters most for Claude Desktop. A config that uses:

{
  "command": "tine",
  "args": ["mcp", "serve", "--api-url", "http://127.0.0.1:9473"]
}

is only valid if the Claude process can resolve tine from its own environment.

With pip install --user on macOS, that often means using an absolute command from ~/Library/Python/<python-version>/bin/.

If your host cannot resolve tine, register an explicit command path instead:

tine mcp register --host claude --api-url http://127.0.0.1:9473 --command "$(command -v tine-mcp)"

You can do the same with print-config if you want to manage the file manually:

tine mcp print-config --host claude --api-url http://127.0.0.1:9473 --command "$(command -v tine-mcp)"

MCP config generation

Generate an MCP config document for a supported host:

tine mcp print-config --host vscode

Supported hosts:

  • vscode
  • cursor
  • claude
  • generic

If your Tine server uses a non-default API URL, include it explicitly:

tine mcp print-config --host vscode --api-url http://127.0.0.1:9473

Example VS Code config output:

{
  "servers": {
    "tine": {
      "type": "stdio",
      "command": "tine",
      "args": ["mcp", "serve", "--api-url", "http://127.0.0.1:9473"]
    }
  }
}

Example Claude Desktop config output:

{
  "mcpServers": {
    "tine": {
      "command": "tine",
      "args": ["mcp", "serve", "--api-url", "http://127.0.0.1:9473"]
    }
  }
}

For GUI hosts such as Claude Desktop on macOS, you may prefer an absolute command path instead:

{
  "mcpServers": {
    "tine": {
      "command": "/absolute/path/to/tine-mcp",
      "args": ["--api-url", "http://127.0.0.1:9473"]
    }
  }
}

MCP config registration

To write the generated config directly into the standard host config location:

tine mcp register --host vscode --api-url http://127.0.0.1:9473

Equivalent examples:

tine mcp register --host cursor --api-url http://127.0.0.1:9473
tine mcp register --host claude --api-url http://127.0.0.1:9473
tine mcp register --host claude --api-url http://127.0.0.1:9473 --command "$(command -v tine-mcp)"

Default config targets are resolved per OS:

Host macOS Linux Windows
VS Code ~/Library/Application Support/Code/User/mcp.json ~/.config/Code/User/mcp.json %APPDATA%/Code/User/mcp.json
Cursor ~/Library/Application Support/Cursor/User/mcp.json ~/.config/Cursor/User/mcp.json %APPDATA%/Cursor/User/mcp.json
Claude ~/Library/Application Support/Claude/claude_desktop_config.json ~/.config/Claude/claude_desktop_config.json %APPDATA%/Claude/claude_desktop_config.json

If you prefer to manage the file yourself, print the config and copy it into your host config manually instead of using register.

Common local setup

For the most common local setup:

pip install tine
tine serve --workspace . --bind 127.0.0.1:9473 --open
tine mcp register --host vscode --api-url http://127.0.0.1:9473

That gives you:

  • the web UI talking to the local API
  • the MCP adapter talking to the same local API
  • one local Rust backend shared by both

Development from source

If you are working inside this repository rather than using the release package, the development startup path is:

cargo run -p tine-cli -- serve --workspace . --bind 127.0.0.1:9473 --open

That path is for repo development. For fresh user onboarding and release usage, prefer pip install tine followed by tine serve.

Repository guide

If you are navigating the repo, these are the most relevant top-level areas:

  • ui/ for the browser UI
  • crates/tine-server/ for the local HTTP and WebSocket server
  • crates/tine-cli/ for the local launcher and operator commands
  • packaging/python/ for the Python wrapper, packaging, and MCP entrypoints

Contributing

Contributions from both humans and AI agents are welcome.

For contribution rules, issue focus areas, validation guidance, and the current priority list, see the repository-level CONTRIBUTING.md.

Acknowledgements

Tine is grateful to the ipykernel and Jupyter communities. Their work helped establish the notebook and kernel patterns that make interactive computing and tool-driven workflows possible.

Metadata

Release files for tine 0.3.0

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

Source distribution (sdist)

Source distribution for tine 0.3.0
File Size Uploaded
tine-0.3.0.tar.gz 181.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tine 0.3.0
File Interpreter ABI Platform
tine-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 345.5 kB

Release files / tine-0.3.0.tar.gz

Download URL tine-0.3.0.tar.gz
Size 181.8 kB
Tags Source
SHA-256 checksum
How to use checksums
5cf3bb5b2e47a79452879152f35e74060c93abc4a7a0d0933ac76bd9428e46a9
BLAKE2b-256 checksum
How to use checksums
75f23f8ce389f1a6c2c335008a5d79c8503a8a56ce83d2876dd955c0b2bf2a88
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 28, 2026.

Transparency log

Release files / tine-0.3.0-py3-none-any.whl

Download URL tine-0.3.0-py3-none-any.whl
Size 163.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
afb44e0f3b155c23833ceeeb7c14aa6bb9dfff744ff408965ae9f25f6fcc5674
BLAKE2b-256 checksum
How to use checksums
7c2eac475746fa00e2ec233db38821f439b8d403e3241a9d503d7e9b73c36f08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 28, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.1.7

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.5

2 release files

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