Skip to main content
Tools are MCP servers exposed as executables in your Airstore filesystem. Run them like any CLI command.

Where tools live

ls ~/airstore/tools/
# github  linear  slack  notion  gdrive
Each tool is an executable that wraps an MCP server.

Running a tool

~/airstore/tools/github create-issue \
  --repo=acme/api \
  --title="Bug: Login fails" \
  --body="Steps to reproduce..."
Output is JSON:
{
  "id": 142,
  "url": "https://github.com/acme/api/issues/142",
  "title": "Bug: Login fails",
  "state": "open"
}

Available commands

Each tool has multiple commands. List them with --help:
~/airstore/tools/github --help
Available commands:
  create-issue    Create a new issue
  comment         Add a comment to an issue or PR
  merge-pr        Merge a pull request
  list-prs        List pull requests
  list-issues     List issues
Get help for a specific command:
~/airstore/tools/github create-issue --help

Tool examples

GitHub

# Create an issue
~/airstore/tools/github create-issue \
  --repo=acme/api \
  --title="Feature request" \
  --labels="enhancement"

# Comment on a PR
~/airstore/tools/github comment \
  --repo=acme/api \
  --number=147 \
  --body="LGTM, merging now"

# Merge a PR
~/airstore/tools/github merge-pr \
  --repo=acme/api \
  --number=147

Linear

# Create an issue
~/airstore/tools/linear create-issue \
  --title="Investigate performance regression" \
  --project="Backend API" \
  --priority=high

# Update issue status
~/airstore/tools/linear update-issue \
  --id=ENG-142 \
  --status="In Progress"

Slack

# Post a message
~/airstore/tools/slack post \
  --channel="#engineering" \
  --message="Deploy complete!"

# React to a message
~/airstore/tools/slack react \
  --channel="#engineering" \
  --timestamp="1234567890.123456" \
  --emoji="rocket"

Using with Claude Code

Claude Code can invoke tools directly. When you run Claude in the Airstore directory, it has access to both sources (files) and tools (executables).
cd ~/airstore
claude "Read the support emails and create Linear issues for each bug report"
Claude will:
  1. Read files from sources/gmail/support/
  2. Analyze each email
  3. Call tools/linear create-issue for each bug

JSON output

All tools output JSON for easy parsing:
# Parse with jq
~/airstore/tools/github list-issues --repo=acme/api | jq '.[].title'

# Use in scripts
ISSUE_URL=$(~/airstore/tools/github create-issue \
  --repo=acme/api \
  --title="Bug" | jq -r '.url')
echo "Created: $ISSUE_URL"

Error handling

Tools return non-zero exit codes on failure:
~/airstore/tools/github create-issue --repo=nonexistent/repo
# Exit code: 1
# {"error": "Repository not found"}
Check exit codes in scripts:
if ~/airstore/tools/github merge-pr --repo=acme/api --number=147; then
  echo "Merged successfully"
else
  echo "Merge failed"
fi

Next steps