Metadata-Version: 2.1
Name: robin-sdk
Version: 0.1.0
Summary: Python SDK for Robinhood MCP Trading API — zero third-party dependencies
Author: Robin SDK Contributors
License: Apache-2.0
Project-URL: Homepage, https://github.com/robin-sdk/robin-sdk
Project-URL: Documentation, https://github.com/robin-sdk/robin-sdk#readme
Project-URL: Repository, https://github.com/robin-sdk/robin-sdk
Project-URL: Issues, https://github.com/robin-sdk/robin-sdk/issues
Keywords: robinhood,trading,mcp,sdk,finance
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial :: Investment
Classifier: Typing :: Typed
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"

# Robin SDK

A Python SDK for the Robinhood MCP (Model Context Protocol) Trading API.

**Zero third-party runtime dependencies** — uses only the Python standard library to eliminate supply-chain attack surface.

## Installation

```bash
pip install robin-sdk
```

Or install from source:

```bash
git clone https://github.com/robin-sdk/robin-sdk.git
cd robin-sdk
pip install -e .
```

## Security

This SDK has **zero runtime dependencies**. Every import is from the Python standard library. This eliminates the risk of supply-chain attacks through transitive dependencies.

## Quick Start

### Async Usage

```python
import asyncio
from robin_sdk import RobinClient

async def main():
    async with RobinClient(client_id="your_client_id") as client:
        # List accounts
        accounts = await client.get_accounts()
        print(accounts)

        # Get portfolio
        portfolio = await client.get_portfolio(account_number="YOUR_ACCOUNT")
        print(portfolio)

        # Search for a ticker
        results = await client.search(query="Apple")
        print(results)

        # Get real-time quotes
        quotes = await client.get_equity_quotes(symbols=["AAPL", "GOOGL"])
        print(quotes)

        # Place an order
        order = await client.place_equity_order(
            account_number="YOUR_ACCOUNT",
            symbol="AAPL",
            quantity="1",
            side="buy",
            type="market",
        )
        print(order)

asyncio.run(main())
```

### Sync Usage

```python
from robin_sdk import RobinClient

client = RobinClient(client_id="your_client_id")
client.authenticate()

accounts = client.get_accounts_sync()
portfolio = client.get_portfolio_sync(account_number="YOUR_ACCOUNT")
```

## Environment Variables

| Variable | Description | Required |
|----------|-------------|----------|
| `ROBINHOOD_CLIENT_ID` | Your Robinhood OAuth2 client ID | Yes (or pass to constructor) |

## API Reference

Detailed documentation with inputs, outputs, and notes is available in the [`documentation/`](documentation/methods-overview.md) folder.

### Account & Portfolio

| Method | Description | Details |
|--------|-------------|---------|
| [`get_accounts()`](documentation/account-portfolio.md#get_accounts) | View all Robinhood accounts | [account-portfolio.md](documentation/account-portfolio.md) |
| [`get_portfolio(account_number)`](documentation/account-portfolio.md#get_portfolioaccount_number) | Get portfolio snapshot with values by asset class | [account-portfolio.md](documentation/account-portfolio.md) |
| [`search(query)`](documentation/account-portfolio.md#searchquery) | Find a company name or partial name to a ticker | [account-portfolio.md](documentation/account-portfolio.md) |

### Watchlists

| Method | Description | Details |
|--------|-------------|---------|
| [`get_watchlists()`](documentation/watchlists.md#get_watchlists) | List user's watchlists | [watchlists.md](documentation/watchlists.md) |
| [`get_watchlist_items(watchlist_id)`](documentation/watchlists.md#get_watchlist_itemslist_id) | List symbols in a watchlist | [watchlists.md](documentation/watchlists.md) |
| [`get_option_watchlist()`](documentation/watchlists.md#get_option_watchlist) | Load an options watchlist | [watchlists.md](documentation/watchlists.md) |
| [`get_popular_watchlists()`](documentation/watchlists.md#get_popular_watchlists) | Discover Robinhood lists | [watchlists.md](documentation/watchlists.md) |
| [`create_watchlist(name, ...)`](documentation/watchlists.md#create_watchlistdisplay_name-) | Create a new custom watchlist | [watchlists.md](documentation/watchlists.md) |
| [`update_watchlist(watchlist_id, ...)`](documentation/watchlists.md#update_watchlistlist_id-) | Rename or update a watchlist | [watchlists.md](documentation/watchlists.md) |
| [`follow_list(list_id)`](documentation/watchlists.md#follow_watchlistlist_id) | Follow a Robinhood list | [watchlists.md](documentation/watchlists.md) |
| [`unfollow_list(list_id)`](documentation/watchlists.md#unfollow_watchlistlist_id) | Unfollow a Robinhood list | [watchlists.md](documentation/watchlists.md) |
| [`add_to_watchlist(watchlist_id, symbols)`](documentation/watchlists.md#add_to_watchlistlist_id-symbols) | Add symbols to a watchlist | [watchlists.md](documentation/watchlists.md) |
| [`remove_from_watchlist(watchlist_id, symbols)`](documentation/watchlists.md#remove_from_watchlistlist_id-symbols) | Remove symbols from a watchlist | [watchlists.md](documentation/watchlists.md) |
| [`add_option_to_watchlist(watchlist_id, ...)`](documentation/watchlists.md#add_option_to_watchlistoption_ids-position_type) | Add options contract to watchlist | [watchlists.md](documentation/watchlists.md) |
| [`remove_option_from_watchlist(watchlist_id, ...)`](documentation/watchlists.md#remove_option_from_watchlistoption_ids-position_type) | Remove options contract from watchlist | [watchlists.md](documentation/watchlists.md) |

### Market Data

| Method | Description | Details |
|--------|-------------|---------|
| [`get_equity_historicals(symbol, ...)`](documentation/market-data.md#get_equity_historicalssymbols-start_time-) | Get OHLCV price bars | [market-data.md](documentation/market-data.md) |
| [`get_indexes(symbols)`](documentation/market-data.md#get_indexessymbols) | Look up market indexes | [market-data.md](documentation/market-data.md) |
| [`get_indexes_quotes(symbols)`](documentation/market-data.md#get_index_quotesinstrument_ids) | Get real-time index values | [market-data.md](documentation/market-data.md) |

### Equities

| Method | Description | Details |
|--------|-------------|---------|
| [`get_equity_positions(account_number)`](documentation/equities.md#get_equity_positionsaccount_number) | View open equity positions | [equities.md](documentation/equities.md) |
| [`get_equity_quotes(symbols)`](documentation/equities.md#get_equity_quotessymbols) | Real-time quotes for up to 20 symbols | [equities.md](documentation/equities.md) |
| [`get_equity_orders(account_number)`](documentation/equities.md#get_equity_ordersaccount_number) | Equity order status history | [equities.md](documentation/equities.md) |
| [`get_equity_tradability(symbol)`](documentation/equities.md#get_equity_tradabilityaccount_number-symbols) | Check if symbol can be traded | [equities.md](documentation/equities.md) |
| [`review_equity_order(...)`](documentation/equities.md#review_equity_order-) | Simulate an order with pre-trade warnings | [equities.md](documentation/equities.md) |
| [`place_equity_order(...)`](documentation/equities.md#place_equity_order-) | Place an equity order | [equities.md](documentation/equities.md) |
| [`cancel_equity_order(order_id)`](documentation/equities.md#cancel_equity_orderaccount_number-order_id) | Cancel an open equity order | [equities.md](documentation/equities.md) |

### Options

| Method | Description |
|--------|-------------|
| `get_option_chains(symbol)` | Load option chains |
| `get_option_instruments(...)` | Load option contracts by filters |
| `get_option_quotes(instruments)` | Real-time option quotes |
| `get_option_positions(account_number)` | View option positions |
| `get_option_orders(account_number)` | Options order history |
| `review_option_order(...)` | Simulate options order |
| `place_option_order(...)` | Place a real options order |
| `cancel_option_order(order_id)` | Cancel an open options order |

## License

Apache License 2.0
