@sylphx/iris 0.1.9 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -12
- package/bin/{image-reader-mcp → iris} +12 -12
- package/package.json +13 -14
package/README.md
CHANGED
|
@@ -2,9 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
# Iris
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Zero-config (no install)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npx -y @sylphx/iris
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Starts the MCP server on stdio (agents / Codex / Claude Desktop).
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Image evidence for agents
|
|
15
|
+
|
|
16
|
+
Canonical package: **`@sylphx/iris`** · bin **`iris`**
|
|
17
|
+
|
|
18
|
+
**Iris** — **Rust-first** local image facts (`@sylphx/iris`) local image facts, not default VLM guesses. `sharp`/`exifr` are optional, not required for MCP.
|
|
8
19
|
|
|
9
20
|
<p align="center">
|
|
10
21
|
<img src="https://mark.sylphx.com/api/v1/banner?type=holo&theme=tokyonight&text=image+reader+mcp&desc=Evidence-first+image+reading+for+AI+agents+%E2%80%94+metadata%2C+OCR+text%2C+regions%2C+and+ci&height=200&animation=rise&credit=0" alt="image-reader-mcp — Sylphx Mark banner" width="100%" />
|
|
@@ -16,7 +27,7 @@ Evidence-first image reading for AI agents. One call turns any local image into
|
|
|
16
27
|
**Agent Media Twin** — dimensions, metadata, optional OCR with bounding boxes, and
|
|
17
28
|
trust warnings you can cite without asking a vision LLM to guess.
|
|
18
29
|
|
|
19
|
-
[](https://www.npmjs.com/package/@sylphx/iris)
|
|
20
31
|
[](https://opensource.org/licenses/MIT)
|
|
21
32
|
[](https://github.com/SylphxAI/image-reader-mcp/actions/workflows/ci.yml)
|
|
22
33
|
[](https://www.typescriptlang.org/)
|
|
@@ -37,13 +48,23 @@ Each instrument is an independent repository (marketplace + stars).
|
|
|
37
48
|
|
|
38
49
|
|
|
39
50
|
|
|
51
|
+
## See objects (L2, optional)
|
|
52
|
+
|
|
53
|
+
With a local Florence-class sidecar or Ollama, the same `read_image` can return **open-vocab objects** with pixel bboxes and scores:
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{ "path": "/abs/photo.jpg", "include_semantics": true, "semantics_prompt": "people and animals" }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Objects are `scored_non_locator` evidence — deterministic L0/L1 facts (geometry/OCR/layout) stay authoritative and always on.
|
|
60
|
+
|
|
40
61
|
## Read images (not vague vision)
|
|
41
62
|
|
|
42
63
|
Iris is **local-first**: geometry + OCR + **layout blocks** + **agent_map** so a text-only agent can understand picture architecture without a vision model.
|
|
43
64
|
|
|
44
65
|
Spec: [docs/specs/agent-image-read-contract.md](docs/specs/agent-image-read-contract.md)
|
|
45
66
|
|
|
46
|
-
**Local-first frontier:** Rust decode, Tesseract native layout (no npm ML), optional Ollama VLM; cloud URL optional. Zero API key.
|
|
67
|
+
**Local-first frontier:** Rust decode, Tesseract native layout (no npm ML), optional Ollama VLM; cloud URL optional. Zero API key. Optional **L2 local semantics** (include_semantics) detects open-vocab objects (people/animals/things) with pixel bboxes via an official Florence-class sidecar (examples/florence-sidecar/) or Ollama -- never authority over OCR/layout locators.
|
|
47
68
|
|
|
48
69
|
## Product docs
|
|
49
70
|
|
|
@@ -86,15 +107,14 @@ an image, not a creative caption.**
|
|
|
86
107
|
### Install (30 seconds)
|
|
87
108
|
|
|
88
109
|
```bash
|
|
89
|
-
npm install -g @sylphx/
|
|
110
|
+
npm install -g @sylphx/iris
|
|
90
111
|
iris doctor
|
|
91
|
-
claude mcp add iris -- npx @sylphx/
|
|
112
|
+
claude mcp add iris -- npx @sylphx/iris
|
|
92
113
|
```
|
|
93
114
|
|
|
94
115
|
**Install once. Call once.**
|
|
95
116
|
|
|
96
117
|
```bash
|
|
97
|
-
claude mcp add image-reader -- npx @sylphx/image-reader-mcp
|
|
98
118
|
```
|
|
99
119
|
|
|
100
120
|
```json
|
|
@@ -148,7 +168,6 @@ Supported formats: PNG, JPEG, GIF, WebP, TIFF, and other formats the **Rust deco
|
|
|
148
168
|
### Claude Code
|
|
149
169
|
|
|
150
170
|
```bash
|
|
151
|
-
claude mcp add image-reader -- npx @sylphx/image-reader-mcp
|
|
152
171
|
```
|
|
153
172
|
|
|
154
173
|
### Claude Desktop
|
|
@@ -158,9 +177,9 @@ Add this to `claude_desktop_config.json`:
|
|
|
158
177
|
```json
|
|
159
178
|
{
|
|
160
179
|
"mcpServers": {
|
|
161
|
-
"
|
|
180
|
+
"iris": {
|
|
162
181
|
"command": "npx",
|
|
163
|
-
"args": ["@sylphx/
|
|
182
|
+
"args": ["@sylphx/iris"]
|
|
164
183
|
}
|
|
165
184
|
}
|
|
166
185
|
}
|
|
@@ -169,7 +188,7 @@ Add this to `claude_desktop_config.json`:
|
|
|
169
188
|
### Any MCP Client
|
|
170
189
|
|
|
171
190
|
```bash
|
|
172
|
-
npx @sylphx/
|
|
191
|
+
npx @sylphx/iris
|
|
173
192
|
```
|
|
174
193
|
|
|
175
194
|
Node.js `>=22.13` is required. Optional OCR uses a local Tesseract adapter when
|
|
@@ -219,7 +238,7 @@ Example `read_image` requests live in [`examples/`](examples/).
|
|
|
219
238
|
## Support
|
|
220
239
|
|
|
221
240
|
- [Issues](https://github.com/SylphxAI/image-reader-mcp/issues)
|
|
222
|
-
- [npm package](https://www.npmjs.com/package/@sylphx/
|
|
241
|
+
- [npm package](https://www.npmjs.com/package/@sylphx/iris)
|
|
223
242
|
- Portfolio orchestration: [smart-reader-mcp](https://github.com/SylphxAI/smart-reader-mcp)
|
|
224
243
|
|
|
225
244
|
## Help this reach more builders
|
|
@@ -23,10 +23,10 @@ host_platform_key() {
|
|
|
23
23
|
|
|
24
24
|
platform_package_name() {
|
|
25
25
|
case "$(host_platform_key)" in
|
|
26
|
-
darwin-arm64) printf '%s\n' '@sylphx/
|
|
27
|
-
darwin-x64) printf '%s\n' '@sylphx/
|
|
28
|
-
linux-x64) printf '%s\n' '@sylphx/
|
|
29
|
-
linux-arm64) printf '%s\n' '@sylphx/
|
|
26
|
+
darwin-arm64) printf '%s\n' '@sylphx/iris-darwin-arm64' ;;
|
|
27
|
+
darwin-x64) printf '%s\n' '@sylphx/iris-darwin-x64' ;;
|
|
28
|
+
linux-x64) printf '%s\n' '@sylphx/iris-linux-x64-gnu' ;;
|
|
29
|
+
linux-arm64) printf '%s\n' '@sylphx/iris-linux-arm64-gnu' ;;
|
|
30
30
|
*) return 1 ;;
|
|
31
31
|
esac
|
|
32
32
|
}
|
|
@@ -47,7 +47,7 @@ resolve_from_optional_dep() {
|
|
|
47
47
|
"$PACKAGE_ROOT/../../node_modules"
|
|
48
48
|
)
|
|
49
49
|
for root in "${search_roots[@]}"; do
|
|
50
|
-
candidate="$root/$pkg_name/
|
|
50
|
+
candidate="$root/$pkg_name/iris-mcp-server"
|
|
51
51
|
if is_runnable_native "$candidate"; then
|
|
52
52
|
printf '%s\n' "$candidate"
|
|
53
53
|
return 0
|
|
@@ -61,7 +61,7 @@ resolve_from_optional_dep() {
|
|
|
61
61
|
const { createRequire } = require('node:module');
|
|
62
62
|
const r = createRequire(p.join(process.argv[1], 'package.json'));
|
|
63
63
|
const pkg = r.resolve(process.argv[2] + '/package.json');
|
|
64
|
-
process.stdout.write(p.join(p.dirname(pkg), '
|
|
64
|
+
process.stdout.write(p.join(p.dirname(pkg), 'iris-mcp-server'));
|
|
65
65
|
} catch { process.exit(1); }
|
|
66
66
|
" "$PACKAGE_ROOT" "$pkg_name" 2>/dev/null || true
|
|
67
67
|
)"
|
|
@@ -74,8 +74,8 @@ resolve_from_optional_dep() {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
resolve_rust_bin() {
|
|
77
|
-
if [[ -n "${
|
|
78
|
-
printf '%s\n' "${
|
|
77
|
+
if [[ -n "${IRIS_RUST_BIN:-}" && -x "${IRIS_RUST_BIN}" ]]; then
|
|
78
|
+
printf '%s\n' "${IRIS_RUST_BIN}"
|
|
79
79
|
return 0
|
|
80
80
|
fi
|
|
81
81
|
if bin="$(resolve_from_optional_dep)"; then
|
|
@@ -83,9 +83,9 @@ resolve_rust_bin() {
|
|
|
83
83
|
return 0
|
|
84
84
|
fi
|
|
85
85
|
for candidate in \
|
|
86
|
-
"$PACKAGE_ROOT/bin/native/
|
|
87
|
-
"$PACKAGE_ROOT/target/release/
|
|
88
|
-
"$PACKAGE_ROOT/target/debug/
|
|
86
|
+
"$PACKAGE_ROOT/bin/native/iris-mcp-server" \
|
|
87
|
+
"$PACKAGE_ROOT/target/release/iris-mcp-server" \
|
|
88
|
+
"$PACKAGE_ROOT/target/debug/iris-mcp-server"; do
|
|
89
89
|
if is_runnable_native "$candidate"; then
|
|
90
90
|
printf '%s\n' "$candidate"
|
|
91
91
|
return 0
|
|
@@ -115,5 +115,5 @@ if bin="$(resolve_rust_bin)"; then
|
|
|
115
115
|
exec "$bin" "$@"
|
|
116
116
|
fi
|
|
117
117
|
|
|
118
|
-
echo "[iris] Rust MCP server not found. Install matching optional native package (@sylphx/
|
|
118
|
+
echo "[iris] Rust MCP server not found. Install matching optional native package (@sylphx/iris-<platform>) or run: bun run build:rust" >&2
|
|
119
119
|
exit 1
|
package/package.json
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sylphx/iris",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"mcpName": "io.github.SylphxAI/
|
|
5
|
-
"description": "Iris
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"mcpName": "io.github.SylphxAI/iris",
|
|
5
|
+
"description": "Iris \u2014 evidence-first image reading for AI agents. Metadata, OCR text, regions, citeable evidence. Local-first. No generative LLM authority.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
|
-
"
|
|
9
|
-
"iris": "./bin/image-reader-mcp"
|
|
8
|
+
"iris": "./bin/iris"
|
|
10
9
|
},
|
|
11
10
|
"files": [
|
|
12
|
-
"bin/
|
|
11
|
+
"bin/iris",
|
|
13
12
|
"dist/",
|
|
14
13
|
"README.md",
|
|
15
14
|
"LICENSE",
|
|
@@ -17,8 +16,7 @@
|
|
|
17
16
|
],
|
|
18
17
|
"exports": {
|
|
19
18
|
".": "./dist/doctor-cli.js",
|
|
20
|
-
"./sdk": "./src/sdk.ts"
|
|
21
|
-
"./iris": "./src/sdk.ts"
|
|
19
|
+
"./sdk": "./src/sdk.ts"
|
|
22
20
|
},
|
|
23
21
|
"publishConfig": {
|
|
24
22
|
"access": "public"
|
|
@@ -60,8 +58,9 @@
|
|
|
60
58
|
"benchmark:release-gate": "bun scripts/release-gate.ts",
|
|
61
59
|
"sync:server-json": "bun scripts/sync-server-json.ts",
|
|
62
60
|
"version-packages": "changeset version && bun run sync:server-json",
|
|
63
|
-
"start": "./bin/
|
|
61
|
+
"start": "./bin/iris",
|
|
64
62
|
"clean": "rm -rf dist coverage",
|
|
63
|
+
"prepublishOnly": "bun run clean && bun run build && bun run build:rust",
|
|
65
64
|
"release": "bun run typecheck && bun run check && bun run build && bun test && changeset publish",
|
|
66
65
|
"benchmark:public-proof": "bun scripts/public-proof.ts",
|
|
67
66
|
"brand:pack-plan": "bun scripts/brand-pack-plan.ts"
|
|
@@ -83,9 +82,9 @@
|
|
|
83
82
|
"optionalDependencies": {
|
|
84
83
|
"sharp": "^0.35.0",
|
|
85
84
|
"exifr": "^7.1.3",
|
|
86
|
-
"@sylphx/
|
|
87
|
-
"@sylphx/
|
|
88
|
-
"@sylphx/
|
|
89
|
-
"@sylphx/
|
|
85
|
+
"@sylphx/iris-darwin-arm64": "0.2.1",
|
|
86
|
+
"@sylphx/iris-darwin-x64": "0.2.1",
|
|
87
|
+
"@sylphx/iris-linux-x64-gnu": "0.2.1",
|
|
88
|
+
"@sylphx/iris-linux-arm64-gnu": "0.2.1"
|
|
90
89
|
}
|
|
91
|
-
}
|
|
90
|
+
}
|