Skip to main content

Python SDK for CircuitNotion MCP Server

Project description

CircuitNotion MCP SDK

A simple Python SDK for interacting with the CircuitNotion MCP Server.

Installation

pip install cn-mcp

Or from source:

pip install -e .

Quick Start

from cn_mcp_sdk import MCPClient

# Initialize client
client = MCPClient(api_key="your-api-key", base_url="http://localhost:8000")

# Create a session
session = client.sessions.create()
print(f"Session ID: {session['session_id']}")

# Write a file
file_resp = client.files.write(
    session_id=session['session_id'],
    path="/output/hello.txt",
    content="Hello, World!"
)
print(f"File ID: {file_resp['file_id']}")

# List files
files = client.files.list(session_id=session['session_id'])
for f in files:
    print(f"  {f['path']} ({f['bytes']} bytes)")

# Execute a terminal command
result = client.terminal.execute(
    session_id=session['session_id'],
    command="echo 'Hello' && ls -la",
    timeout_minutes=5
)
print(f"Exit code: {result['exit_code']}")
print(f"Output: {result['stdout']}")

# Search the web
search_results = client.search.web("Python best practices")
for result in search_results:
    print(f"  {result['title']}: {result['url']}")

# Schedule a task
task = client.scheduler.schedule(
    in_seconds=60,
    payload={"message": "Task executed!"}
)
print(f"Task ID: {task['task_id']}")

# Control a device
device_result = client.devices.execute(
    device_id="device-123",
    action="turn_on",
    parameters={"brightness": 100}
)

# Query the database
rows = client.db.query(
    session_id=session['session_id'],
    sql="SELECT * FROM users LIMIT 10"
)

# Dispose session
client.sessions.dispose(session['session_id'])

API Documentation

Sessions

# Create a session
session = client.sessions.create()

# List active sessions
sessions = client.sessions.list()

# Dispose a session
client.sessions.dispose(session_id)

Files

# Write a file
file_resp = client.files.write(session_id, path, content)

# List files in a session
files = client.files.list(session_id)

# Download a file
content = client.files.download(file_id)

# Delete a file
client.files.delete(file_id)

Terminal

# Execute a command
result = client.terminal.execute(
    session_id=session_id,
    command="pip list",
    timeout_minutes=5,
    output_limit_kb=4096
)
# Returns: {
#   "exit_code": 0,
#   "stdout": "...",
#   "stderr": "",
#   "duration_seconds": 1.23
# }

Search

# Web search
results = client.search.web("Python")

# With location
results = client.search.web("restaurants", location="New York")

# Returns: [
#   {
#     "title": "...",
#     "url": "...",
#     "snippet": "...",
#     "position": 1
#   },
#   ...
# ]

Scheduler

# Schedule a task in N seconds
task = client.scheduler.schedule(
    in_seconds=300,
    payload={"data": "value"}
)

# Schedule at specific time (ISO format)
task = client.scheduler.schedule(
    run_at="2026-04-08T15:30:00Z",
    payload={"data": "value"}
)

# List tasks
tasks = client.scheduler.list()

# Cancel a task
client.scheduler.cancel(task_id)

Devices

# Control a device
result = client.devices.execute(
    device_id="device-123",
    action="turn_on",
    parameters={"level": 80}
)

Database

# Query (read-only)
rows = client.db.query(
    session_id=session_id,
    sql="SELECT * FROM table"
)

# Execute (write operations)
result = client.db.execute(
    session_id=session_id,
    sql="INSERT INTO table (col) VALUES (?)",
    params=["value"]
)

Cache Stats

# Get API key cache statistics
stats = client.auth.cache_stats()
# Returns: {
#   "size": 45,
#   "max_size": 1000,
#   "ttl_seconds": 300,
#   "negative_ttl_seconds": 30
# }

Configuration

Via Constructor

client = MCPClient(
    api_key="your-api-key",
    base_url="http://localhost:8000",
    timeout=30,
    verify_ssl=True
)

Via Environment Variables

export MCP_API_KEY=your-api-key
export MCP_BASE_URL=http://localhost:8000
export MCP_TIMEOUT=30
export MCP_VERIFY_SSL=true
# Uses env vars by default
client = MCPClient()

Error Handling

from cn_mcp_sdk import MCPClient, MCPError, MCPAuthError, MCPNotFoundError

try:
    session = client.sessions.create()
except MCPAuthError as e:
    print(f"Authentication failed: {e}")
except MCPNotFoundError as e:
    print(f"Resource not found: {e}")
except MCPError as e:
    print(f"API error: {e}")

Examples

See the examples/ directory for more detailed examples:

  • basic_usage.py - Basic session and file operations
  • terminal_commands.py - Running terminal commands
  • web_search.py - Web search functionality
  • scheduled_tasks.py - Scheduling and managing tasks
  • device_control.py - Controlling devices
  • database_queries.py - Database operations

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

cn_mcp-0.2.3.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

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

cn_mcp-0.2.3-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

File details

Details for the file cn_mcp-0.2.3.tar.gz.

File metadata

  • Download URL: cn_mcp-0.2.3.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cn_mcp-0.2.3.tar.gz
Algorithm Hash digest
SHA256 1da3807f72b2d757aed770f2d722f1ab1b147da03dc79500c6af97445445a637
MD5 a513441b3854413aae503345f50e0745
BLAKE2b-256 e7e63adc76e60fd1ca2ab2bcecc46df0655c9ff2cfd9f74b133458fbd15e303d

See more details on using hashes here.

Provenance

The following attestation bundles were made for cn_mcp-0.2.3.tar.gz:

Publisher: pypi-publish.yml on ntirushwajeanmarc/cn-mcp-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cn_mcp-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: cn_mcp-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 11.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cn_mcp-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7d0a88ab91f8b8014b1c9de9e01bdc4b0905eb34cd297b043ab254ceb536e88a
MD5 a12b9045bd3bda6ab3d14329e0a2c5a2
BLAKE2b-256 a3136b83c3e8e49b4405b752f3d7201c838624f6bcfa882e462c93fb51375cdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for cn_mcp-0.2.3-py3-none-any.whl:

Publisher: pypi-publish.yml on ntirushwajeanmarc/cn-mcp-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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