Using Orca with Claude & ChatGPT
Orca 2 can be connected to AI assistants so they can geolocate images on your behalf — no manual upload required. You describe a photo, paste a URL, or share an image and the assistant automatically calls Orca to find where it was taken.
Claude Desktop (MCP)
Claude Desktop supports the Model Context Protocol (MCP), which lets you give Claude access to external tools. Adding Orca as an MCP tool means Claude can call locate_image directly during any conversation.
1. Get your Orca API key
Go to Workspace → API Keys and create a new key. Copy it — you will need it in the next step.
2. Create the MCP server file
Save the following as ~/orca-mcp/index.js on your machine:
#!/usr/bin/env node
// Orca MCP server for Claude Desktop
// Requires: npm install @modelcontextprotocol/sdk node-fetch
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import fetch from "node-fetch";
const ORCA_API = "https://oceanir.ai/api";
const API_KEY = process.env.ORCA_API_KEY;
const server = new Server(
{ name: "orca", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
server.setRequestHandler("tools/list", async () => ({
tools: [
{
name: "locate_image",
description: "Geolocate an image using Orca 2. Returns the location, coordinates, confidence score, and reasoning.",
inputSchema: {
type: "object",
properties: {
image_url: { type: "string", description: "Public URL of the image to analyze" },
depth: {
type: "string",
enum: ["d1", "d2", "d3"],
description: "d1=quick (15s), d2=standard (35s), d3=deep (60s). Default: d2"
}
},
required: ["image_url"]
}
}
]
}));
server.setRequestHandler("tools/call", async (req) => {
const { image_url, depth = "d2" } = req.params.arguments;
const imgRes = await fetch(image_url);
const blob = await imgRes.buffer();
const form = new FormData();
form.append("image", new Blob([blob]), "image.jpg");
form.append("depth", depth);
const res = await fetch(`${ORCA_API}/workspace/analyze`, {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}` },
body: form,
});
const data = await res.json();
const a = data.analysis;
return {
content: [{
type: "text",
text: [
`Location: ${a.location}`,
`Coordinates: ${a.coordinates}`,
`Confidence: ${a.confidence}%`,
`Model: ${a.aiModel}`,
`Depth: ${(a.depth || depth).toUpperCase()}`,
`\nReasoning: ${a.reasoning}`,
].join("\n")
}]
};
});
const transport = new StdioServerTransport();
await server.connect(transport);3. Install dependencies
cd ~/orca-mcp
npm install @modelcontextprotocol/sdk node-fetch4. Configure Claude Desktop
Open ~/Library/Application Support/Claude/claude_desktop_config.json and add:
{
"mcpServers": {
"orca": {
"command": "node",
"args": ["/home/nextjs/orca-mcp/index.js"],
"env": {
"ORCA_API_KEY": "your-api-key-here"
}
}
}
}5. Restart Claude Desktop
Quit and relaunch Claude Desktop. You will see a hammer icon in the input bar indicating tools are available. Claude can now geolocate any image you share or link to.
Try it: Paste an image URL in Claude and ask "Where was this taken?" — Claude will automatically call Orca and return the location with reasoning.
ChatGPT (Custom GPT Action)
ChatGPT Custom GPTs support Actions — HTTP endpoints described by an OpenAPI schema. You can create a GPT that calls Orca whenever it needs to geolocate an image.
1. Create a Custom GPT
Go to chatgpt.com → Explore GPTs → Create. Give it a name like Orca Geolocator and a description. In the system prompt, add:
You are a geolocation assistant powered by Orca 2 by Oceanir.
When the user shares an image URL or asks where a photo was taken,
call the locate_image action and present the location, coordinates,
confidence score, and reasoning in a clear format.2. Add the Action
In the GPT editor, click Add actions and paste this OpenAPI schema:
openapi: 3.1.0
info:
title: Orca Geolocation API
version: 1.0.0
servers:
- url: https://oceanir.ai
paths:
/api/workspace/analyze:
post:
operationId: locate_image
summary: Geolocate an image using Orca 2
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required: [image_url]
properties:
image_url:
type: string
description: Public URL of the image
depth:
type: string
enum: [d1, d2, d3]
default: d2
description: "d1=quick, d2=standard, d3=deep"
responses:
"200":
description: Geolocation result
content:
application/json:
schema:
type: object
properties:
analysis:
type: object
properties:
location: { type: string }
coordinates: { type: string }
confidence: { type: number }
reasoning: { type: string }
aiModel: { type: string }
security:
- ApiKeyAuth: []
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: Authorization3. Set authentication
In the Action settings, choose API Key authentication, set the header name to Authorization, and enter Bearer your-api-key-here as the value.
4. Publish and use
Save the GPT. Share the image URL in the chat and ask where it was taken — your GPT will call Orca and return the result.
Note: ChatGPT Actions can only call image URLs, not upload binary files directly. Make sure the image is publicly accessible before passing it to the GPT.
Credit usage
Each call to Orca from Claude or ChatGPT draws from your Oceanir balance. D1 (Surface) is free for signed-in accounts. D2 (Standard) uses 3 credits per call. D3 (OSINT, full forensic) is exclusive to Investigator and Unit subscribers — it's not purchasable with credit packs. Monitor usage in your Workspace → Usage dashboard.