PixInsight Connector
NPM · PIXINSIGHT-CONNECTOR
Operate PixInsight from any MCP agent. Community project, not affiliated with Pleiades Astrophoto
Available components
Last scanned (22 hours ago)
Scores higher than 90% of npm servers
Category Design and Media
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to mxcoppell/pixinsight-connector). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 15 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability67
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 17706 tokens (~194/item across 91 items; 91 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management73
- Stability observed for 22 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "remove_mask" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 92 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 15 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Oct 26 +3
No change was recorded against any check on this day. Stability & Change Management went from 33 to 57. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
- 4 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 30 Sept 26 −15
- Known CVEs: pass → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Dependency health: 0.84 → unverified ▼ functional
- Package version: 2.3.0 → 2.5.0 functional
- Package version: 2.3.0 → 2.4.1 functional
- Package version: 2.3.0 → 2.4.0 functional
- 29 Sept 26 +16
- Malware scan: unverified → pass ▲ security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 16 Oct 2026 · Analysed npm/pixinsight-connector@2.5.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | mxcoppell/pixinsight-connector |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/mxcoppell/pixinsight-connector/.github/workflows/test.yml@refs/tags/v2.5.0 |
| Rekor log index | 3026745618 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:658333ac08c808ade203a262c4e88630b252b32c1b8b818a05afebda4b17a6d6d6fdcc91953c93a40210e150b5eb3dd680be86d5b4765f2c39fad9810 |
Background: How many MCP packages publish verified provenance →
Dependencies 92 packages
| Packages resolved | 92 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
align_files ~360
Register image files onto a reference image file with StarAlignment, file to file (no views are opened). Targets run in batches of at most batch_size (20 at most), one StarAlignment execution per batch. Registered files (<name><output_postfix>.xisf) go to output_dir, which must lie inside <workspace>/output (a relative path is resolved there) or the state folder. matrix_only: StarAlignment in OutputMatrix mode, reporting the registration per target without keeping any image file; its output directory is a temporary folder under <workspace>/agentic/scratch/align_files that is deleted afterwards, and any file written there is listed. Per target the result gives the outputData values StarAlignment reports (output file, star pair matches, errors, transformation elements, as this PixInsight names them). Runs without geometry confirmation dialogs.
| Name | Type | Req | Description |
|---|---|---|---|
| batch_size | integer | – | Targets per StarAlignment execution, 1 to 20 (default 20) |
| distortion_correction | boolean | – | StarAlignment distortion correction; omitted, PixInsight's default |
| interpolation | string | – | StarAlignment pixel interpolation; omitted, PixInsight's default |
| matrix_only | boolean | – | Compute the registration only; keep no image files (default false) |
| output_dir | string | – | Folder for registered files: relative to <workspace>/output, or absolute inside <workspace>/output or the state folder. Not used with matrix_only |
| output_postfix | string | – | Suffix of registered file names (default "_r") |
| overwrite | boolean | – | Overwrite existing registered files (default false) |
| reference_file | string | yes | Absolute path of the reference image file |
| target_files | array | yes | Absolute paths of the files to register |
No output schema declared.
No examples provided.
align_to_reference ~64
Align a target image to a reference image using StarAlignment. The target is replaced in place with the aligned version.
| Name | Type | Req | Description |
|---|---|---|---|
| reference_id | string | yes | Reference view ID (not modified) |
| target_id | string | yes | Target view ID (replaced with the aligned version) |
No output schema declared.
No examples provided.
apply_mask ~80
Apply a mask to a target view. The mask protects areas where it is black (0) and allows processing where it is white (1). Use inverted=true to flip this.
| Name | Type | Req | Description |
|---|---|---|---|
| inverted | boolean | – | Invert the mask (default false) |
| mask_id | string | yes | Mask view ID |
| target_id | string | yes | Target view ID |
No output schema declared.
No examples provided.
auto_stretch ~396
Stretch a view in place with PixInsight's auto-stretch (the ScreenTransferFunction Auto Stretch computation), applied as a HistogramTransformation. Per channel, sigma = 1.4826 × MAD (the median absolute deviation from the median). A channel whose median is below 0.5 gets shadows clipping c0 = median + shadows_clipping × sigma, clamped to [0,1] (0 when sigma is 0), and midtones balance m = MTF(target_bg, median − c0), where MTF(m, x) = (m − 1)·x / ((2m − 1)·x − m); a channel whose median is above 0.5 is treated as inverted: highlights clipping c1 = median − shadows_clipping × sigma (1 when sigma is 0) and m = MTF(c1 − median, target_bg). linked: one transform for R, G and B, with c0 (or c1) the mean over channels of the per-channel clipping points (a channel with sigma 0 adds 0, or 1 for c1) and the mean median in place of the median; the image is treated as inverted only when every channel median is above 0.5. The defaults of shadows_clipping, target_bg and linked are PixInsight's auto-stretch defaults. Fails, changing nothing, when the clipping point leaves no range for a midtones balance.
| Name | Type | Req | Description |
|---|---|---|---|
| linked | boolean | – | Colour images: true computes one transform for R, G and B; false computes one per channel. Ignored for mono images |
| shadows_clipping | number | – | Clipping point relative to the median, in units of sigma = 1.4826 × MAD |
| target_bg | number | – | Target background level, strictly between 0 and 1 |
| view_id | string | yes | View ID to stretch |
No output schema declared.
No examples provided.
cancel_job ~137
Stop a job started by run_pjsr or run_pjsr_file with `async`. A job PixInsight has not started yet is removed and never runs. A running job is stopped at its next processEvents() call, where an error with MCP_CANCELLED ends the script; a native process call (a single long process, a file save) cannot be interrupted, so the stop takes effect after it returns, and what the script already changed stays changed. Without job_id: the running job. job_status reports the outcome.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | – | The id run_pjsr returned. Omit for the running job. |
No output schema declared.
No examples provided.
catalog_stars ~390
List catalogue stars over a plate-solved view from PixInsight's local Gaia database: one Gaia search centred on the image, with a radius reaching its corners (plus margin_fraction), down to mag_limit. Per star: image x, y, RA, Dec, G, BP-RP where the catalogue has them, whether it falls inside the frame, and for in-frame stars the peak luminance in a 5x5 box (with saturated = peak >= saturation_level when that is given). data_release omitted: releases are asked get-info in the order DR3/SP, DR3, EDR3, DR2 and the earliest of them that reports valid is searched; a failed search is reported, not retried on another release. supplement adds stars the catalogue lacks (marked with their name); a Gaia star within merge_px of one is replaced by it. Sorted by G, brightest at the top. The full list is written to a JSON file under <workspace>/agentic/scratch/catalog; the reply carries it inline up to 200 stars.
| Name | Type | Req | Description |
|---|---|---|---|
| data_release | string | – | Gaia data release to search; omitted, the earliest valid one in the order DR3/SP, DR3, EDR3, DR2 |
| mag_limit | number | yes | Faintest G magnitude listed |
| margin_fraction | number | – | Extra search radius as a fraction of the centre-to-corner radius (default 0.05) |
| merge_px | number | – | Distance in pixels within which a Gaia star is replaced by a supplement star (default 3) |
| saturation_level | number | – | Peak luminance at or above which an in-frame star is flagged saturated; omitted, no flag |
| supplement | array | – | Stars to add: [{ra, dec, mag, name}] in degrees and catalogue-band magnitude |
| view_id | string | yes | Plate-solved view |
No output schema declared.
No examples provided.
clone_image ~68
Clone an image to a backup view, which can be restored from later with restore_from_clone. The clone keeps the image's FITS keywords, astrometric solution and view properties.
| Name | Type | Req | Description |
|---|---|---|---|
| clone_id | string | yes | Name for the clone |
| source_id | string | yes | Source view ID |
No output schema declared.
No examples provided.
close_image ~28
Close an image window to free memory.
| Name | Type | Req | Description |
|---|---|---|---|
| view_id | string | yes | View ID to close |
No output schema declared.
No examples provided.
close_mask ~31
Close and delete a mask window to free memory.
| Name | Type | Req | Description |
|---|---|---|---|
| mask_id | string | yes | Mask view ID to close |
No output schema declared.
No examples provided.
combine_channels ~100
Combine 3 mono views into a single RGB color image using ChannelCombination. All 3 views must have identical dimensions. Returns the view ID of the combined image.
| Name | Type | Req | Description |
|---|---|---|---|
| b_view_id | string | yes | Blue channel view ID |
| g_view_id | string | yes | Green channel view ID |
| output_id | string | yes | Desired output view ID (the combined image is renamed to this) |
| r_view_id | string | yes | Red channel view ID |
No output schema declared.
No examples provided.
compare_images ~176
Compare two open views of the same width, height and channel count, pixel by pixel, over the whole image or a rectangle. Per channel: maximum, mean and 99th-percentile absolute difference, and the fraction of samples outside [0, 1] in each view. "identical" is true when every absolute difference is 0. The 99th percentile is taken over at most 2,000,000 evenly spaced samples (p99Samples says how many); maximum and mean use every sample. Neither view is changed.
| Name | Type | Req | Description |
|---|---|---|---|
| rect | array | – | Optional region [x0, y0, x1, y1] in pixels, x1/y1 exclusive |
| reference_id | string | yes | Second view (B), compared against A |
| view_id | string | yes | First view (A) |
No output schema declared.
No examples provided.
continuous_clamp ~309
Compress bright values in place above a knee that varies per pixel. A luminance image (Rec.709 weights for colour) is blurred with a Gaussian of sigma blur_sigma and divided by its maximum, giving L in [0,1]; the knee is min_clamp + (max_clamp − min_clamp)·(1 − L), so it equals min_clamp where L = 1 and max_clamp where L = 0. mode soft: a value above the knee becomes knee + headroom·(1 − exp(−rate·(value − knee)/headroom)); mode hard: min(value, knee). The same expression is applied to every channel and the result is truncated to [0,1].
| Name | Type | Req | Description |
|---|---|---|---|
| blur_sigma | number | – | Gaussian blur sigma of the luminance mask, in pixels; omitted = max(60, round(image width / 100)) |
| headroom | number | – | Soft mode, required there: the most the output can exceed the knee |
| max_clamp | number | yes | Knee where the blurred luminance is 0 |
| min_clamp | number | yes | Knee where the blurred luminance is at its maximum |
| mode | string | yes | soft: exponential compression above the knee; hard: values above the knee are set to the knee |
| rate | number | – | Soft mode, required there: steepness of the exponential compression |
| view_id | string | yes | Target view to clamp (modified in place) |
No output schema declared.
No examples provided.
continuum_subtract_ha ~114
Subtract the scaled R channel of an RGB view from an Ha view, in place. Ha = max(0, Ha - continuum_factor * R). Runs as 64-bit PixelMath truncated to [0,1]; reports the new median and max.
| Name | Type | Req | Description |
|---|---|---|---|
| continuum_factor | number | yes | Multiplier on R subtracted from Ha |
| ha_id | string | yes | Ha view (mono), modified in place |
| rgb_id | string | yes | RGB view whose R channel is subtracted (same dimensions) |
No output schema declared.
No examples provided.
copy_astrometric_solution ~86
Copy the astrometric solution (WCS) and observation keywords from a source image file to a target view. Source and target must have the same dimensions; the target's pixels are unchanged.
| Name | Type | Req | Description |
|---|---|---|---|
| source_file | string | yes | Absolute path to the source image file that carries the WCS |
| target_id | string | yes | Target view ID to receive the WCS |
No output schema declared.
No examples provided.
create_adaptive_zone_masks ~229
Create three masks from percentiles of the image's own luminance. Subject pixels are those brighter than the background median + 5 MAD, sampled inside a circle of radius 0.35 * min(width, height) around their brightness-weighted centroid. Core = above the subject percentile 85 + 10 * core_bias; shell = a triangular ramp between the 25th percentile and the core level, peaking at their midpoint; outer = subject level up to the 25th percentile. Each is feathered over 20 px outside the circle and Gaussian-blurred with sigma 5, 10 and 20. Creates views azone_core, azone_shell and azone_outer, replacing views of those names; fewer than 50 sampled subject pixels is an error.
| Name | Type | Req | Description |
|---|---|---|---|
| core_bias | number | – | Position of the core threshold on its 0-1 scale: 0 = percentile 85, 1 = percentile 95 (default 0.5, the middle of the scale) |
| view_id | string | yes | Source view the masks are computed from |
No output schema declared.
No examples provided.
create_luminance_mask ~137
Create a luminance mask from a color view: Y = 0.2126R + 0.7152G + 0.0722B, then an optional blur and shadow clip.
| Name | Type | Req | Description |
|---|---|---|---|
| blur | number | – | Blur sigma applied to the mask (default 5) |
| clip_low | number | – | Shadow clip threshold, below which the mask is 0 (default 0.10) |
| gamma | number | – | Gamma curve applied to the mask (default 1.0) |
| mask_id | string | yes | Name for the mask |
| source_id | string | yes | Source color view ID |
No output schema declared.
No examples provided.
create_synthetic_luminance ~181
Create a mono view from a weighted sum of Ha and OIII. It is ha_weight * Ha + oiii_weight * OIII, replacing any view of that name; with max_value the result is min(…, max_value); it is then truncated to [0,1]. Reports the new view's median and max.
| Name | Type | Req | Description |
|---|---|---|---|
| ha_id | string | yes | Ha view (mono) |
| ha_weight | number | yes | Multiplier on Ha |
| max_value | number | – | Optional: upper cap on the result. Omitted = truncation to [0,1] only |
| oiii_id | string | yes | OIII view (mono, same dimensions) |
| oiii_weight | number | yes | Multiplier on OIII |
| output_id | string | – | Name of the view to create; omitted = SYNTH_L |
No output schema declared.
No examples provided.
create_zone_masks ~226
Create core, shell and halo masks from three fixed luminance thresholds. Luminance is the Rec.709 luma of a color view, the samples of a gray one: core = above core_clip, shell = shell_clip to core_clip, halo = halo_clip to shell_clip, each ramped linearly from 0 to 1 across its band and Gaussian-blurred with sigma 8, 12 and 20. Creates views mask_core, mask_shell and mask_halo, replacing views of those names. Requires halo_clip < shell_clip < core_clip < 1.
| Name | Type | Req | Description |
|---|---|---|---|
| core_clip | number | yes | Luminance above which a pixel is in the core mask (0-1) |
| halo_clip | number | yes | Luminance above which a pixel, up to shell_clip, is in the halo mask (0-1) |
| shell_clip | number | yes | Luminance above which a pixel, up to core_clip, is in the shell mask (0-1) |
| view_id | string | yes | Source view the masks are computed from |
No output schema declared.
No examples provided.
crop_image ~171
Crop pixels off the edges of an image, in place. Amounts are pixels to remove from each side. All four amounts 0 (or omitted) runs nothing and leaves the image, and its astrometric solution, unchanged. Crop runs with noGUIMessages, so PixInsight writes its warnings to the Process Console instead of opening a confirmation dialog. A crop deletes the image's astrometric solution (PixInsight behaviour); the result says when one was removed.
| Name | Type | Req | Description |
|---|---|---|---|
| bottom | number | – | Pixels to remove from the bottom edge |
| left | number | – | Pixels to remove from the left edge |
| right | number | – | Pixels to remove from the right edge |
| top | number | – | Pixels to remove from the top edge |
| view_id | string | yes | View ID to crop |
No output schema declared.
No examples provided.
describe_process ~71
Describe one PixInsight process by its PJSR constructor name: whether it can run on a view and/or globally, its current parameter values and their types, and any named numeric constants it exposes for those parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | PJSR process constructor name, e.g. "SCNR". |
No output schema declared.
No examples provided.
dynamic_narrowband_blend ~382
Add Ha and OIII (mono views) to an RGB view in place, through a temporary luminance mask. R += ha_strength * Ha; B += oiii_strength * OIII; G += f * ha_strength * g_ha_fraction * Ha + (1 - f) * g_strength * OIII, with f = (OIII*Ha)^(1-OIII*Ha). Each channel above max_output becomes max_output + (x - max_output) * rolloff. The mask is the Rec.709 luminance of the target, Gaussian-blurred with sigma mask_blur, then 0 below mask_clip and (x - mask_clip) / (1 - mask_clip) above it; it is removed afterwards. Runs as 64-bit PixelMath truncated to [0,1]; reports the median and the R and B maxima.
| Name | Type | Req | Description |
|---|---|---|---|
| g_ha_fraction | number | yes | Fraction of ha_strength applied to Ha in the G term |
| g_strength | number | yes | Multiplier on OIII in the G term |
| ha_id | string | yes | Ha view (mono, same dimensions) |
| ha_strength | number | yes | Multiplier on Ha added to R |
| mask_blur | number | yes | Gaussian sigma (pixels) of the luminance mask blur |
| mask_clip | number | yes | Mask level below which the blend does not apply; 0 = no clip |
| max_output | number | yes | Per-channel level above which the soft clamp compresses |
| oiii_id | string | yes | OIII view (mono, same dimensions) |
| oiii_strength | number | yes | Multiplier on OIII added to B |
| rolloff | number | yes | Fraction of the excess above max_output that is kept |
| target_id | string | yes | Target RGB view, modified in place |
No output schema declared.
No examples provided.
ensure_dir ~110
Create a folder, with any missing parents, inside the workspace's output folder or state folder. A relative path is resolved under <workspace>/output; an absolute one must lie inside <workspace>/output or the state folder (<workspace>/agentic by default), and a path anywhere else is refused. An existing folder is left as it is. Returns the absolute path.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Folder path: relative to <workspace>/output, or absolute inside <workspace>/output or the state folder |
No output schema declared.
No examples provided.
export_image ~223
Write an image to a file in the workspace's output or state folder. A relative file_path is resolved under <workspace>/output; an absolute one must lie inside <workspace>/output or the state folder (<workspace>/agentic by default), and a path anywhere else is refused. Format comes from the extension: .tif/.tiff, .png, .jpg/.jpeg, .xisf, .fits. TIFF and PNG default to 16-bit, JPEG to 8-bit; use 32 for float. The file keeps the image's FITS keywords, astrometric solution and view properties (formats that cannot store them drop them). The working image is not changed. Missing parent folders are created.
| Name | Type | Req | Description |
|---|---|---|---|
| bits | number | – | Sample depth for tif/png/xisf/fits (default 16 for tif/png, 32 otherwise) |
| file_path | string | yes | Output file path: relative to <workspace>/output, or absolute inside <workspace>/output or the state folder |
| view_id | string | yes | View ID to export |
No output schema declared.
No examples provided.
extract_pseudo_oiii ~109
Create a mono view from the B channel of an RGB view minus its scaled R channel. OIII = max(0, B - continuum_factor * R); any view of that name is replaced. Reports the new view's median and max.
| Name | Type | Req | Description |
|---|---|---|---|
| continuum_factor | number | yes | Multiplier on R subtracted from B |
| output_id | string | – | Name of the view to create; omitted = OIII_pseudo |
| rgb_id | string | yes | Source RGB view |
No output schema declared.
No examples provided.
find_filters ~148
Search PixInsight's built-in filter and camera QE database by name (case-insensitive substring). A grouped name also matches each name it stands for ("Sony IMX411/455/461/533/571" matches "IMX533"); results are ordered exact name, then substring, then grouped-name matches. Use it to pick exact names for run_spfc or run_spcc. Sensor QE curves have channel Q.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | – | Optional: R, G, B, L, PAN (multiband OSC) or Q (sensor QE) |
| query | string | – | e.g. "Astronomik", "Ha", "IMX533", "Chroma" |
No output schema declared.
No examples provided.
get_image_dimensions ~46
Get dimensions, channel count, and color status for one or more views. Every channel must have identical dimensions before ChannelCombination.
| Name | Type | Req | Description |
|---|---|---|---|
| view_ids | array | yes | View IDs to check |
No output schema declared.
No examples provided.
get_image_stats ~60
Get image statistics: median, MAD, min, max, per-channel medians, and per channel the fraction of samples at exactly 0 and at exactly 1 (clampFractions).
| Name | Type | Req | Description |
|---|---|---|---|
| view_id | string | yes | PixInsight view ID |
No output schema declared.
No examples provided.
ha_inject_luminance ~125
Raise the luminance of an RGB view in place where Ha exceeds it, keeping colour ratios. With Y the Rec.709 luminance, each channel is multiplied by (Y + strength * max(Ha - Y, 0)) / Y. Runs as 64-bit PixelMath truncated to [0,1].
| Name | Type | Req | Description |
|---|---|---|---|
| ha_id | string | yes | Ha view (mono, same dimensions) |
| strength | number | yes | Fraction of the Ha excess over the luminance that is added |
| target_id | string | yes | Target RGB view, modified in place |
No output schema declared.
No examples provided.
ha_inject_red ~241
Add Ha to the red channel of an RGB view in place, where Ha exceeds R by a given fraction. Where Ha > R * (1 + brightness_limit), R becomes R + strength * (Ha - R); elsewhere R, and G and B everywhere, are unchanged. With max_output and rolloff, R above max_output becomes max_output + (R - max_output) * rolloff. Runs as 64-bit PixelMath truncated to [0,1]; reports the new R maximum and the image median and max.
| Name | Type | Req | Description |
|---|---|---|---|
| brightness_limit | number | yes | Ha is added only where Ha > R * (1 + brightness_limit) |
| ha_id | string | yes | Ha view (mono, same dimensions) |
| max_output | number | – | Optional: R level above which the soft clamp compresses; given together with rolloff. Omitted = no clamp |
| rolloff | number | – | Fraction of the excess above max_output that is kept; given together with max_output |
| strength | number | yes | Fraction of the Ha excess over R added to R |
| target_id | string | yes | Target RGB view, modified in place |
No output schema declared.
No examples provided.
inspect_environment ~379
Report what this PixInsight installation has, by asking PixInsight. gaia: Gaia get-info for DR2, EDR3, DR3 and DR3/SP (valid, database files, magnitude range, mean spectra) and a 0.1-degree search on the lowest valid release. mars: one MultiscaleGradientCorrection run per MARS file (from PixInsight settings, or mars_files) on a temporary synthetic plate-solved image; per file: readable, missing or corrupt, and how many MARS reference images cover the probe position. xterminators: BlurXTerminator, NoiseXTerminator and StarXTerminator run once each on a temporary 64x64 image; reports version, ML model version and gpu/cpu from their console banner (null when not printed). processes: the PixInsight core version and build, whether MultiscaleAdaptiveStretch, MultiscaleGradientCorrection, BlurXTerminator, NoiseXTerminator and StarXTerminator are installed processes, and whether ImageSolver, AstrometricSolutionVerifier, DistortionEvaluator, FFTRegistration and MosaicByCoordinates are installed scripts, with the version each script declares; nothing is run. system: free and total memory, free space on the workspace volume. Temporary images are closed; open images are not touched. Without ra_deg/dec_deg the probe position is RA 0, Dec 0 and coverage is reported as null.
| Name | Type | Req | Description |
|---|---|---|---|
| dec_deg | number | – | Probe position declination, degrees [-90, 90]. Given with ra_deg. |
| mars_files | array | – | Absolute .xmars paths to test instead of the configured ones |
| ra_deg | number | – | Probe position right ascension, degrees [0, 360). Given with dec_deg. |
| sections | array | – | Sections to run (default: all) |
No output schema declared.
No examples provided.
job_status ~151
Report on a job started by run_pjsr or run_pjsr_file with `async`: its state (queued, running, ending = stopped in PixInsight with its result not yet collected, done, failed, cancelled, stopped), elapsed time, seconds since the running script last called processEvents(), its latest mcpProgress() text, and, once it has ended, its result or error and PixInsight console errors. Without job_id: the running job, else the most recent one. Read-only; it does not use PixInsight, so it answers while a job runs.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | – | The id run_pjsr returned. Omit for the running or most recent job. |
No output schema declared.
No examples provided.
linear_fit ~73
Run LinearFit to scale a linear image to match a reference view. The reference is not modified.
| Name | Type | Req | Description |
|---|---|---|---|
| reference_id | string | yes | Reference view ID. |
| reject_high | number | – | High rejection threshold. |
| reject_low | number | – | Low rejection threshold. |
| view_id | string | yes | PixInsight view identifier. |
No output schema declared.
No examples provided.
list_open_images ~24
List all currently open images in PixInsight with their dimensions and color status.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_packs ~42
List the runtime tool packs discovered at server startup, with load status, tool counts, why any pack was skipped, and which core tools packs replaced. Read-only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_processes ~57
List every PixInsight process available on this installation, by its PJSR constructor name (e.g. "SCNR", "PixelMath"). Read-only; classifies by prototype chain and never instantiates a process to build the list.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
lrgb_combine ~288
Replace the lightness of an RGB view with a grayscale L view using LRGBCombination, in place on the RGB view. Only the L channel is enabled, so the RGB view keeps its own color channels. lightness and saturation are LRGBCombination's transfer-function midtones balances mL and mc (0.5 leaves that component unchanged). When linear_fit_reject_high is given, the call also runs LinearFit on the L view (modified in place, ahead of the combination) against a temporary luminance image 0.2126 R + 0.7152 G + 0.0722 B of the RGB view; when it is omitted, no LinearFit runs. Chrominance noise reduction and highlight clipping are left at PixInsight's defaults.
| Name | Type | Req | Description |
|---|---|---|---|
| l_id | string | yes | Grayscale luminance view ID with the same dimensions as rgb_id |
| lightness | number | yes | Midtones balance of the lightness transfer function (LRGBCombination mL), 0 to 1 |
| linear_fit_reject_high | number | – | LinearFit rejectHigh for the fit of L to the RGB luminance; omitted = no LinearFit |
| rgb_id | string | yes | RGB color view ID (modified in place) |
| saturation | number | yes | Midtones balance of the saturation transfer function (LRGBCombination mc), 0 to 1 |
No output schema declared.
No examples provided.
measure_bright_chroma ~115
Measure chroma, (max - min) / max, of the bright pixels of a colour view: every 8th pixel whose mean of R, G and B is above brightness_threshold. Returns JSON: median_chroma, mean_chroma, p25_chroma, p75_chroma, bright_pixel_count. A mono view is an error.
| Name | Type | Req | Description |
|---|---|---|---|
| brightness_threshold | number | yes | Mean of R, G and B above which a pixel is measured |
| view_id | string | yes | Colour view to measure |
No output schema declared.
No examples provided.
measure_clipped_blocks ~193
Count image blocks with pixels above a level. Tiles the image in block_size px blocks and samples every 3rd pixel; a sample counts when its luminance or any channel is above level, and a block counts when more than block_fraction of its samples do. Returns JSON: blocks_over, total_blocks, locations (up to 10 counted blocks in descending fraction order: x, y, fraction). luminance is 0.2126R + 0.7152G + 0.0722B.
| Name | Type | Req | Description |
|---|---|---|---|
| block_fraction | number | yes | Fraction of a block's samples (0-1) that must be above level for the block to count |
| block_size | integer | – | Block edge in pixels (default 50) |
| level | number | yes | Pixel level; a sample whose luminance or any channel is above it counts |
| view_id | string | yes | View to measure |
No output schema declared.
No examples provided.
measure_core_clipping ~166
Measure how much of the brightest region is above a level. Around the brightest 64 px block (mean luminance), counts pixels with any channel above level in a 128 px box (every 2nd pixel) and a 32 px box (every pixel), both centred on that block and held inside the image. Returns JSON: fraction_above_wide, fraction_above_inner, peak (largest luminance in the wide box), core_center [x, y], wide_box, inner_box. luminance is 0.2126R + 0.7152G + 0.0722B.
| Name | Type | Req | Description |
|---|---|---|---|
| level | number | yes | Pixel level; a pixel with any channel above it is counted |
| view_id | string | yes | View to measure |
No output schema declared.
No examples provided.
measure_highlight_texture ~322
Measure the texture of the bright subject zone. Subject pixels have luminance above median + 5 x (median |luminance - median| on a 32 px grid). The ROI is a circle around the luminance-weighted centroid of compact subject pixels (8 px grid, at least 2 of 4 neighbours 3 px away also subject), radius = their 90th-percentile distance held to [50 px, 0.45 x min(width, height)]. The shell zone is the P20..P92 band of the subject pixels in the ROI (every 4th pixel). local_stddev = median luminance stddev of 16 px blocks in the ROI whose samples are at least 40% shell; tonal_span = P90 - P10 of the shell pixels; gradient_energy = mean Sobel energy on shell pixels. With reference_id, the reference is measured over the same ROI and retention is current / reference for each value (null where the reference value is at most 0.0001, or 0.001 for tonal_span). Returns JSON: current, reference, retention, shell_zone, roi, shell_pixel_count, block_count. Fewer than 100 subject pixels in the ROI of either view is an error. luminance is 0.2126R + 0.7152G + 0.0722B.
| Name | Type | Req | Description |
|---|---|---|---|
| reference_id | string | – | Optional second view measured over the same ROI, for the retention ratios |
| view_id | string | yes | View to measure |
No output schema declared.
No examples provided.
measure_ringing ~209
Measure concentric oscillation around the brightest region. The centre is the middle of the brightest 64 px block (mean luminance); the radial luminance profile is averaged over 36 angles for radii 1..150 px (held inside the image). Along the profile, derivatives within ±0.001 carry no sign; at each sign change the summed |derivative| of the run it ends is its amplitude, and it is counted when that amplitude is above min_amplitude. Returns JSON: oscillations, max_amplitude (of the counted ones), center [x, y], profile_sample (the profile at radii 1..30). luminance is 0.2126R + 0.7152G + 0.0722B.
| Name | Type | Req | Description |
|---|---|---|---|
| min_amplitude | number | yes | Amplitude (summed |derivative| of a run) above which a sign change is counted as an oscillation |
| view_id | string | yes | View to measure |
No output schema declared.
No examples provided.
measure_saturation ~127
Measure HSV saturation, (max - min) / max, of subject pixels of a colour view: every 8th pixel whose luminance is above the luminance of the channel medians + 5 x (median |luminance - that| on a 32 px grid). Returns JSON: median, p90, p99, max, subject_pixel_count. A mono view is an error. luminance is 0.2126R + 0.7152G + 0.0722B.
| Name | Type | Req | Description |
|---|---|---|---|
| view_id | string | yes | Colour view to measure |
No output schema declared.
No examples provided.
measure_sharpness ~194
Measure sharpness as the mean Sobel gradient energy (gx² + gy²) of luminance over every 4th pixel of a region. The region is roi_x/roi_y/roi_w/roi_h when all four are given (it must lie inside the image), else the central half of the image in each dimension. Returns JSON: sharpness, samples, roi {x, y, w, h}. luminance is 0.2126R + 0.7152G + 0.0722B.
| Name | Type | Req | Description |
|---|---|---|---|
| roi_h | number | – | Region height in pixels |
| roi_w | number | – | Region width in pixels |
| roi_x | number | – | Region left edge in pixels (all four ROI values together, or none: the central half) |
| roi_y | number | – | Region top edge in pixels |
| view_id | string | yes | View to measure |
No output schema declared.
No examples provided.
measure_star_layer ~189
Measure a star layer (a mostly black view holding stars). Over every 4th pixel whose largest channel is above 0.005 (nonzero_pixel_count), reports the fraction whose largest channel is above each of the given levels, the interquartile range of their HSV saturation (color_diversity), and the median (max - min) / max of the 20 brightest by R+G+B (bright_star_chroma). Also the largest channel value (max) and the image median (the mean of the channel medians for colour). Returns JSON: max, median, fraction_above {level: fraction}, color_diversity, bright_star_chroma, nonzero_pixel_count.
| Name | Type | Req | Description |
|---|---|---|---|
| levels | array | yes | Pixel levels; for each, the fraction of star pixels whose largest channel is above it is reported |
| view_id | string | yes | Star layer view to measure |
No output schema declared.
No examples provided.
measure_stars ~243
Measure the stars of a view by pixel sampling. Candidates are local maxima of luminance found by a 16 px grid scan above median + 5 x MAD, refined within 5x5, de-duplicated within 20 px (at most 100 kept); the 30 brightest are measured. FWHM of a star = 2 x the mean radius, over the four axis directions (up to 10 px), where luminance drops below half its peak, located to a fraction of a pixel by linear interpolation between the samples either side; colour diversity of a star = max - min of its peak RGB divided by the largest channel. Returns JSON: median_fwhm_px, color_diversity (median), stars_found, stars_measured, median_peak, p25_peak, background_median, star_background_contrast (median_peak / background_median, 0 when background_median <= 0.001), and up to 10 samples of each. luminance is 0.2126R + 0.7152G + 0.0722B.
| Name | Type | Req | Description |
|---|---|---|---|
| view_id | string | yes | View to measure |
No output schema declared.
No examples provided.
measure_subject_detail ~200
Measure subject brightness, detail and contrast. The image is split into 32 px blocks; a block is subject when its luminance median is above median + 8 x 1.4826 x MAD. subject_brightness = median of subject block medians; background_median = median of the other block medians; contrast_ratio = subject_brightness / background_median (0 when that is at most 0.001); detail_score = mean Sobel energy of luminance over every 4th pixel of up to 50 subject blocks; subject_count = subject blocks; subject_threshold = median + 3 x 1.4826 x MAD. Returns JSON: subject_brightness, detail_score, contrast_ratio, subject_count, background_median, subject_threshold. luminance is 0.2126R + 0.7152G + 0.0722B.
| Name | Type | Req | Description |
|---|---|---|---|
| view_id | string | yes | View to measure |
No output schema declared.
No examples provided.
measure_tonal_presence ~276
Measure subject and background tones. Every 8th pixel is subject when its luminance is above the background (luminance of the channel medians) + 5 x (median |luminance - background| on a 32 px grid) and at least 2 of its 4 neighbours 3 px away are too; every other sample is background. separation = subject median / background median; core_brightness = mean of the brightest 5% of subject samples; core_to_disk = core_brightness / subject median; faint_structure_visibility = (subject P10 - background P90) / background P90; subject_fraction = subject samples / all samples; roi_mode is compound_roi when a second luminance-weighted cluster, outside 0.15 x width of the centroid and holding over 15% of the weight, lies more than 0.25 x width away, else single. Denominators are held to at least 0.001. Returns JSON: separation, subject_median, background_median, core_brightness, faint_structure_visibility, core_to_disk, subject_fraction, roi_mode, subject_pixel_count. luminance is 0.2126R + 0.7152G + 0.0722B.
| Name | Type | Req | Description |
|---|---|---|---|
| view_id | string | yes | View to measure |
No output schema declared.
No examples provided.
measure_uniformity ~57
Measure background uniformity via 4-corner median stddev. Lower score means more uniform.
| Name | Type | Req | Description |
|---|---|---|---|
| sample_size | integer | – | Corner sample size in pixels (default 200) |
| view_id | string | yes | PixInsight view ID |
No output schema declared.
No examples provided.
multi_scale_enhance ~630
Masked three-scale LocalHistogramEqualization on a view, in one call, with an optional HDRMultiscaleTransform pass. The mask is the image lightness (CIE L* for colour, the image itself for mono) mapped as max((L - mask_clip_low) / (1 - mask_clip_low), 0), raised to the power 1/mask_gamma and blurred with a Gaussian of sigma mask_blur (0 = no blur). LHE then runs at the large, mid and fine radius in that order through the mask; the large and mid scales use lhe_slope_limit, the fine scale lhe_fine_slope_limit; other LHE parameters are PixInsight's defaults. Giving hdrmt_layers adds an HDRMultiscaleTransform pass through the same mask. The mask is closed afterwards. Reports a detail score before and after: the mean squared Sobel gradient of luminance (Rec.709 weights) over pixels brighter than median + 8 x 1.4826 x MAD, sampled every 8 pixels.
| Name | Type | Req | Description |
|---|---|---|---|
| hdrmt_inverted | boolean | – | HDRMT inverted iterations (needs hdrmt_layers; omitted = PixInsight default) |
| hdrmt_iterations | integer | – | HDRMT number of iterations (needs hdrmt_layers; omitted = PixInsight default) |
| hdrmt_layers | integer | – | HDRMultiscaleTransform number of layers. Giving it runs the HDRMT pass; omitted, no HDRMT runs |
| hdrmt_median_transform | boolean | – | HDRMT median transform instead of the wavelet transform (needs hdrmt_layers; omitted = PixInsight default) |
| hdrmt_to_lightness | boolean | – | HDRMT toLightness: on a colour image, apply the transform to the lightness only (needs hdrmt_layers; omitted = PixInsight default) |
| lhe_fine_amount | number | yes | Fine-scale LHE amount, 0 to 1 |
| lhe_fine_radius | number | yes | Fine-scale LHE kernel radius in pixels |
| lhe_fine_slope_limit | number | yes | LHE contrast slope limit of the fine scale |
| lhe_large_amount | number | yes | Large-scale LHE amount, 0 to 1 |
| lhe_large_radius | number | yes | Large-scale LHE kernel radius in pixels |
| lhe_mid_amount | number | yes | Mid-scale LHE amount, 0 to 1 |
| lhe_mid_radius | number | yes | Mid-scale LHE kernel radius in pixels |
| lhe_slope_limit | number | yes | LHE contrast slope limit of the large and mid scales |
| mask_blur | number | yes | Gaussian blur sigma of the mask in pixels (0 = no blur) |
| mask_clip_low | number | yes | Lightness mapped to 0 in the mask; values above it are rescaled to 0-1 |
| mask_gamma | number | yes | Mask gamma: the rescaled mask is raised to the power 1/mask_gamma (1 = unchanged) |
| view_id | string | yes | View ID to enhance (modified in place) |
No output schema declared.
No examples provided.
open_image ~58
Open an XISF/FITS image file in PixInsight. Returns the view ID assigned by PixInsight. Automatically closes any crop_mask windows that come with XISF files.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the image file |
No output schema declared.
No examples provided.
How do I install the PixInsight Connector MCP server?
PixInsight Connector runs locally as an npm package, launched with npx -y pixinsight-connector. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · pixinsight-connector
claude mcp add mxcoppell-pixinsight-connector -- npx -y pixinsight-connector
What is the PixInsight Connector MCP server?
PixInsight Connector is an MCP server listed in the public MCP registry as io.github.mxcoppell/pixinsight-connector. Operate PixInsight from any MCP agent. Community project, not affiliated with Pleiades Astrophoto. This page covers its npm package (pixinsight-connector).
Is the PixInsight Connector MCP server safe to use?
PixInsight Connector scores 88 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 16 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the PixInsight Connector MCP server expose?
PixInsight Connector exposes 91 tools: align_files, verify_astrometry, run_plate_solve, copy_astrometric_solution, catalog_stars, and 86 more. Their descriptions and schemas cost roughly 17,602 tokens of context every time the server is loaded.
Is the PixInsight Connector MCP server still maintained?
PixInsight Connector is still listed as active in the MCP registry. We last reached this channel on 16 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the PixInsight Connector MCP server under?
PixInsight Connector declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.