Capture and analyze photos from your mobile device directly in Claude Code. Perfect for hardware debugging, PCB inspection, chip identification, and any task where Claude needs to see something in the physical world.
- Remote photo capture: Generate URLs that open a camera interface on mobile devices
- Hardware debugging: Inspect circuit boards, components, and electronic devices
- Chip identification: Read and identify chip markings, part numbers, and labels
- Visual analysis: Analyze error screens, handwritten notes, schematics, and documentation
- Reusable capture sessions: Take multiple photos without generating new URLs
- Integrated workflow: Photos automatically available for Claude to analyze
- S3-compatible storage: You'll need access to an S3-compatible bucket (AWS S3, Backblaze B2, etc.)
- Claude Code: Latest version installed
Visit https://www.ai.moda/mcp-servers/remote-camera/ for complete setup instructions.
The setup guide will walk you through:
- Creating an S3-compatible storage bucket (AWS S3, Backblaze B2, or other providers)
- Configuring the required permissions and CORS settings
- Generating your authentication token
At the end of the setup, you'll receive a base64-encoded token that looks like:
eyJzM1VybCI6Imh0dHBzOi8vczMudXMtZWFzdC0wMDUuYmFja2JsYXplYjIuY29tL3lvdXItYnVja2V0LW5hbWUvIiwiYWNjZXNzS2V5SWQiOiJ5b3VyLWFjY2Vzcy1rZXktaWQiLCJzZWNyZXRBY2Nlc3NLZXkiOiJ5b3VyLXNlY3JldC1hY2Nlc3Mta2V5IiwicmVnaW9uIjoidXMtZWFzdC0wMDUifQ==
Copy this token for the next step.
Set the REMOTE_CAMERA_AUTH_TOKEN environment variable with your base64-encoded token:
macOS/Linux (in ~/.zshrc or ~/.bashrc):
export REMOTE_CAMERA_AUTH_TOKEN="eyJzM1VybCI6Imh0dHBzOi8v..."Or set it per-session:
export REMOTE_CAMERA_AUTH_TOKEN="eyJzM1VybCI6Imh0dHBzOi8v..."
claudeWindows (PowerShell):
$env:REMOTE_CAMERA_AUTH_TOKEN = "eyJzM1VybCI6Imh0dHBzOi8v..."From the ai.moda marketplace:
/plugin marketplace add aimoda/claude-code-plugin-marketplace
/plugin install remote-camera@aimoda
For local development:
- Clone or copy this plugin to your local machine
- Add the plugin directory to your Claude Code settings
- Restart Claude Code
Once installed, Claude automatically uses the remote camera skill when you need to capture photos from the physical world.
Simply describe what you need help with:
"Can you identify this chip on my board?"
Claude will:
- Generate a capture URL with instructions
- Present the URL for you to open on your mobile device
- Wait for you to take and upload the photo
- Automatically analyze the photo once uploaded
Hardware Debugging:
User: "This circuit isn't working, can you help debug it?"
Claude: I'll help you debug the circuit. Let me generate a remote camera
capture link so I can see your board...
[capture URL provided]
Please open this URL on your mobile device and take a photo showing your
full PCB with all components visible. I'll wait for the upload...
[analyzes photo after upload]
I can see the issue - the polarized capacitor C3 is installed backwards...
Chip Identification:
User: "What chip is this?"
Claude: Let me take a look. I've generated a capture link...
[provides URL with instruction: "Take a close-up photo of the chip markings"]
[waits for upload and analyzes]
This is a Texas Instruments TPS54331 step-down converter...
Multiple Photos:
User: "I need help with several components on my board."
Claude: [generates capture URL]
After you upload the first photo, you can use the same URL to take
additional photos. I'll detect each new upload automatically.
While Claude automatically uses this skill when appropriate, you can also explicitly request photo capture:
- "Take a photo of..."
- "Can you see..."
- "Help me identify..."
- "Show me what's wrong with..."
- Generate URL: Claude calls
generate_upload_urlwith clear instructions - User captures: You open the URL on your mobile device and take a photo
- Upload: The photo uploads directly to your S3 bucket
- Poll: Claude polls your S3 bucket waiting for the upload
- Analyze: Once uploaded, Claude downloads and analyzes the photo
- Upload URLs: Valid for 7 days, reusable for multiple captures
- Download URLs: Valid for 7 days
- Storage: Photos stored in your S3 bucket at
remote-camera-mcp/{session-id} - Session IDs: UUID format, serves as the filename
- File format: Any image format supported by your mobile device (JPEG, HEIC, PNG, etc.)
- Your storage: All photos stored in your S3 bucket, you control the data
- Private URLs: Presigned URLs with limited validity (7 days)
- No server storage: The MCP server doesn't store any photos, only facilitates upload/download
- Credentials: Your S3 credentials never leave your machine (sent only in Authorization header)
- PCB debugging and inspection
- Component identification
- Chip part number reading
- Solder joint inspection
- Trace layout verification
- Connector pin mapping
- Wire color identification
- Handwritten notes transcription
- Schematic diagram analysis
- Datasheet page capture
- Reference design review
- Error message screenshots
- Error screen capture
- Status display reading
- Diagnostic information
- Assembly verification
- Configuration checking
Cause: Environment variable not set or not accessible to Claude Code
Solution:
- Verify
REMOTE_CAMERA_AUTH_TOKENis set:echo $REMOTE_CAMERA_AUTH_TOKEN - Restart Claude Code after setting the environment variable
- Ensure Claude Code was started from a shell that has the variable set
Cause: Auth token is not properly base64-encoded
Solution:
- Regenerate the token at https://www.ai.moda/mcp-servers/remote-camera/
- Copy the complete token without any extra whitespace or newlines
- Verify the token decodes to valid JSON:
echo $REMOTE_CAMERA_AUTH_TOKEN | base64 -d
Cause: S3 credentials JSON is missing required fields or has incorrect format
Solution:
- Regenerate your token at https://www.ai.moda/mcp-servers/remote-camera/ ensuring all S3 settings are correct
- Verify your credentials JSON has all required fields:
s3Url,accessKeyId,secretAccessKey,region - Ensure
s3Urluses HTTPS protocol and ends with a forward slash/
Cause: Photo wasn't uploaded within the timeout period (default 120 seconds)
Solution:
- Ensure you opened the capture URL on your mobile device
- Check your mobile device has internet connectivity
- Try uploading again - the URL is still valid
- Check CORS configuration on your S3 bucket
Cause: Lighting, focus, or angle issues
Solution:
- Claude will guide you on what would help
- Use the same capture URL to take a better photo
- Ensure good lighting on the subject
- Get close enough to see details clearly
- Hold the device steady
The default polling timeout is 120 seconds (2 minutes). Claude adjusts this based on the task, but you can request longer waits:
"Take your time, I'll wait up to 5 minutes for the photo"
Photos are stored at: s3://your-bucket/remote-camera-mcp/{session-id}
You can clean up old photos periodically or set up S3 lifecycle policies to auto-delete after a certain period.
- Bucket isolation: Use a dedicated bucket for remote camera captures
- Credential rotation: Rotate S3 credentials periodically
- Lifecycle policies: Auto-delete old captures after 7-30 days
- Access logging: Enable S3 access logging for audit trail
- Encryption: Enable server-side encryption on your bucket
- Setup Guide: https://www.ai.moda/mcp-servers/remote-camera/
- MCP Server Repository: remote-camera-mcp
- Plugin Issues: File issues on this repository
- Claude Code Documentation: https://docs.claude.com/
MIT License - See LICENSE file for details
Contributions welcome! Please file issues and pull requests on the repository.
Security Notice: Never commit your S3 credentials or auth token to version control. Always use environment variables for sensitive credentials.