Public log

squally-mcp

Local MCP server for Squally — read-only access to your Playwright test runs, flaky tests and failures.

npm · fingerprint 02755c3ad517c33f9616f16b · repository · RSS

7tools
6recorded versions
24dtracked
changed 5d ago

What changed

Changed 2026-10-25 11:29 UTC

6 schema or annotation changes with the description left byte-identical.

--- pinned/squally-debug-failure
+++ observed/squally-debug-failure
  {
    "annotations": {
      "destructiveHint": false,
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
+               "type": [
+                 "string",
+                 "null"
                ]
              },
              "copyPrompt": {
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "A prompt for an assistant that has the repository open, byte-identical to the text that Copy the full context puts on the clipboard (Debug with AI on the attempt page). null for an attempt without a real failure (a pass, a test.fail() marker, no error text)."
+               "description": "A prompt for an assistant that has the repository open, byte-identical to the text that Copy the full context puts on the clipboard (Debug with AI on the attempt page). null for an attempt without a real failure (a pass, a test.fail() marker, no error text).",
+               "type": [
+                 "string",
+                 "null"
+               ]
              },
              "durationMs": {
                "anyOf": [
-                     "anyOf": [
-                       {
-                         "type": "string"
-                       },
-                       {
-                         "type": "null"
-                       }
+                     "type": [
+                       "string",
+                       "null"
                      ]
                    },
                    "snippet": {
-                     "anyOf": [
-                       {
-                         "type": "string"
-                       },
-                       {
-                         "type": "null"
-                       }
+                     "type": [
+                       "string",
+                       "null"
                      ]
                    },
                    "stack": {
-                     "anyOf": [
-                       {
-                         "type": "string"
-                       },
-                       {
-                         "type": "null"
-                       }
+                     "type": [
+                       "string",
+                       "null"
                      ]
                    }
                  },
-               "anyOf": [
-                 {
-                   "type": "boolean"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "Whether the attempt ended by running into its time limit (Playwright's timedOut). null when the reporter did not say - every result from a reporter before 0.10.0."
+               "description": "Whether the attempt ended by running into its time limit (Playwright's timedOut). null when the reporter did not say - every result from a reporter before 0.10.0.",
+               "type": [
+                 "boolean",
+                 "null"
+               ]
              },
              "timeoutMs": {
                "anyOf": [
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
+             "type": [
+               "string",
+               "null"
              ]
            },
            "id": {
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
+             "type": [
+               "string",
+               "null"
              ]
            },
            "name": {
--- pinned/squally-find-run
+++ observed/squally-find-run
  {
    "annotations": {
      "destructiveHint": false,
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "type": "null"
-           }
-         ],
-         "description": "Pass as ?cursor= for the next page of older runs; null on the last page."
+         "description": "Pass as ?cursor= for the next page of older runs; null on the last page.",
+         "type": [
+           "string",
+           "null"
+         ]
        },
        "prevCursor": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "type": "null"
-           }
-         ],
-         "description": "Pass as ?cursor= with direction=prev for newer runs; null on the first page."
+         "description": "Pass as ?cursor= with direction=prev for newer runs; null on the first page.",
+         "type": [
+           "string",
+           "null"
+         ]
        },
        "project": {
          "properties": {
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
+               "type": [
+                 "string",
+                 "null"
                ]
              },
              "cancellation": {
-                       "anyOf": [
-                         {
-                           "type": "string"
-                         },
-                         {
-                           "type": "null"
-                         }
-                       ],
-                       "description": "The user who cancelled the run, when source is \"user\"; null otherwise."
+                       "description": "The user who cancelled the run, when source is \"user\"; null otherwise.",
+                       "type": [
+                         "string",
+                         "null"
+                       ]
                      },
                      "source": {
-                       "anyOf": [
-                         {
-                           "type": "string"
-                         },
-                         {
-                           "type": "null"
-                         }
-                       ],
-                       "description": "Where the cancel came from: \"reporter\" (Playwright was interrupted - a cancelled CI job, a Ctrl-C - and the reporter said so), \"cli\" or \"user\" (the dashboard). A plain string, not a closed set: new sources may be added. null only for a cancel recorded without a source, which Squally never writes."
+                       "description": "Where the cancel came from: \"reporter\" (Playwright was interrupted - a cancelled CI job, a Ctrl-C - and the reporter said so), \"cli\" or \"user\" (the dashboard). A plain string, not a closed set: new sources may be added. null only for a cancel recorded without a source, which Squally never writes.",
+                       "type": [
+                         "string",
+                         "null"
+                       ]
                      }
                    },
                    "required": [
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "The CI run's page - the run page's View in CI link: the URL the reporter sent (squally-reporter 0.11.0; GitHub Actions links the attempt), else for GitHub Actions one built from the project's linked repository when it has exactly one. https only; null when neither applies. Since 1.0.0-beta.15."
+               "description": "The CI run's page - the run page's View in CI link: the URL the reporter sent (squally-reporter 0.11.0; GitHub Actions links the attempt), else for GitHub Actions one built from the project's linked repository when it has exactly one. https only; null when neither applies. Since 1.0.0-beta.15.",
+               "type": [
+                 "string",
+                 "null"
+               ]
              },
              "commitSha": {
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "The commit the run is reported under: the pushed commit, or for a pull request its head commit. The commit the GitHub check and the commit links use."
+               "description": "The commit the run is reported under: the pushed commit, or for a pull request its head commit. The commit the GitHub check and the commit links use.",
+               "type": [
+                 "string",
+                 "null"
+               ]
              },
              "counts": {
                "properties": {
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "The job key the reporter sent (SQUALLY_CI_JOB_KEY, squally-reporter 0.11.0): which job of a CI run this is, for example the browser of a matrix. Each job is its own run with its own GitHub check, Squally · <key>. null when the job set none. Since 1.0.0-beta.15."
+               "description": "The job key the reporter sent (SQUALLY_CI_JOB_KEY, squally-reporter 0.11.0): which job of a CI run this is, for example the browser of a matrix. Each job is its own run with its own GitHub check, Squally · <key>. null when the job set none. Since 1.0.0-beta.15.",
+               "type": [
+                 "string",
+                 "null"
+               ]
              },
              "local": {
                "description": "No shard of the run reported a CI provider: a local run (since 1.0.0-beta.14). GET /runs lists both kinds unless source says otherwise.",
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "The application revision the run was told it tested - opt-in, null unless the CI job sets it: TESTED_REVISION=<revision>, or SAME_REPO_AS_APP=true for the commit CI built (on a pull request, the merge commit). Never the pull request's head - that is commitSha."
+               "description": "The application revision the run was told it tested - opt-in, null unless the CI job sets it: TESTED_REVISION=<revision>, or SAME_REPO_AS_APP=true for the commit CI built (on a pull request, the merge commit). Never the pull request's head - that is commitSha.",
+               "type": [
+                 "string",
+                 "null"
+               ]
              }
            },
            "required": [
--- pinned/squally-get-run
+++ observed/squally-get-run
  {
    "annotations": {
      "destructiveHint": false,
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
+             "type": [
+               "string",
+               "null"
              ]
            },
            "branch": {
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
+             "type": [
+               "string",
+               "null"
              ]
            },
            "cancellation": {
-                     "anyOf": [
-                       {
-                         "type": "string"
-                       },
-                       {
-                         "type": "null"
-                       }
-                     ],
-                     "description": "The user who cancelled the run, when source is \"user\"; null otherwise."
+                     "description": "The user who cancelled the run, when source is \"user\"; null otherwise.",
+                     "type": [
+                       "string",
+                       "null"
+                     ]
                    },
                    "source": {
-                     "anyOf": [
-                       {
-                         "type": "string"
-                       },
-                       {
-                         "type": "null"
-                       }
-                     ],
-                     "description": "Where the cancel came from: \"reporter\" (Playwright was interrupted - a cancelled CI job, a Ctrl-C - and the reporter said so), \"cli\" or \"user\" (the dashboard). A plain string, not a closed set: new sources may be added. null only for a cancel recorded without a source, which Squally never writes."
+                     "description": "Where the cancel came from: \"reporter\" (Playwright was interrupted - a cancelled CI job, a Ctrl-C - and the reporter said so), \"cli\" or \"user\" (the dashboard). A plain string, not a closed set: new sources may be added. null only for a cancel recorded without a source, which Squally never writes.",
+                     "type": [
+                       "string",
+                       "null"
+                     ]
                    }
                  },
                  "required": [
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
+             "type": [
+               "string",
+               "null"
              ]
            },
            "ciRunUrl": {
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
-             ],
-             "description": "The CI run's page - the run page's View in CI link: the URL the reporter sent (squally-reporter 0.11.0; GitHub Actions links the attempt), else for GitHub Actions one built from the project's linked repository when it has exactly one. https only; null when neither applies. Since 1.0.0-beta.15."
+             "description": "The CI run's page - the run page's View in CI link: the URL the reporter sent (squally-reporter 0.11.0; GitHub Actions links the attempt), else for GitHub Actions one built from the project's linked repository when it has exactly one. https only; null when neither applies. Since 1.0.0-beta.15.",
+             "type": [
+               "string",
+               "null"
+             ]
            },
            "commitMessage": {
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
+             "type": [
+               "string",
+               "null"
              ]
            },
            "commitSha": {
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
-             ],
-             "description": "The commit the run is reported under: the pushed commit, or for a pull request its head commit. The commit the GitHub check and the commit links use."
+             "description": "The commit the run is reported under: the pushed commit, or for a pull request its head commit. The commit the GitHub check and the commit links use.",
+             "type": [
+               "string",
+               "null"
+             ]
            },
            "durationMs": {
              "anyOf": [
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
-             ],
-             "description": "The job key the reporter sent (SQUALLY_CI_JOB_KEY, squally-reporter 0.11.0): which job of a CI run this is, for example the browser of a matrix. Each job is its own run with its own GitHub check, Squally · <key>. null when the job set none. Since 1.0.0-beta.15."
+             "description": "The job key the reporter sent (SQUALLY_CI_JOB_KEY, squally-reporter 0.11.0): which job of a CI run this is, for example the browser of a matrix. Each job is its own run with its own GitHub check, Squally · <key>. null when the job set none. Since 1.0.0-beta.15.",
+             "type": [
+               "string",
+               "null"
+             ]
            },
            "local": {
              "description": "No shard of the run reported a CI provider: a local run (since 1.0.0-beta.14). GET /runs lists both kinds unless source says otherwise.",
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
+             "type": [
+               "string",
+               "null"
              ]
            },
            "rerunOf": {
-             "anyOf": [
-               {
-                 "type": "string"
-               },
-               {
-                 "type": "null"
-               }
-             ],
-             "description": "The application revision the run was told it tested - opt-in, null unless the CI job sets it: TESTED_REVISION=<revision>, or SAME_REPO_AS_APP=true for the commit CI built (on a pull request, the merge commit). Never the pull request's head - that is commitSha."
+             "description": "The application revision the run was told it tested - opt-in, null unless the CI job sets it: TESTED_REVISION=<revision>, or SAME_REPO_AS_APP=true for the commit CI built (on a pull request, the merge commit). Never the pull request's head - that is commitSha.",
+             "type": [
+               "string",
+               "null"
+             ]
            }
          },
          "required": [
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
+               "type": [
+                 "string",
+                 "null"
                ]
              },
              "durationMs": {
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
+               "type": [
+                 "string",
+                 "null"
                ]
              },
              "filePath": {
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
+               "type": [
+                 "string",
+                 "null"
                ]
              },
              "fingerprint": {
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
+               "type": [
+                 "string",
+                 "null"
                ]
              },
              "shard": {
-               "anyOf": [
-                 {
-                   "type": "boolean"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "The final attempt's. Whether the attempt ended by running into its time limit (Playwright's timedOut). null when the reporter did not say - every result from a reporter before 0.10.0."
+               "description": "The final attempt's. Whether the attempt ended by running into its time limit (Playwright's timedOut). null when the reporter did not say - every result from a reporter before 0.10.0.",
+               "type": [
+                 "boolean",
+                 "null"
+               ]
              },
              "timeoutMs": {
                "anyOf": [
--- pinned/squally-get-test-metrics
+++ observed/squally-get-test-metrics
  {
    "annotations": {
      "destructiveHint": false,
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "type": "null"
-           }
-         ],
-         "description": "The branch filter applied; null for every branch."
+         "description": "The branch filter applied; null for every branch.",
+         "type": [
+           "string",
+           "null"
+         ]
        },
        "branches": {
          "description": "Every branch the test ran on in the period, code-point order, a null branch (a run whose CI sent none) last.",
-           "anyOf": [
-             {
-               "type": "string"
-             },
-             {
-               "type": "null"
-             }
+           "type": [
+             "string",
+             "null"
            ]
          },
          "type": "array"
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "type": "null"
-           }
-         ],
-         "description": "The Playwright project the name starts with (chromium in \"chromium > cart.spec.ts > adds an item\") - null when the name has none, i.e. when its second part is not the test's own file."
+         "description": "The Playwright project the name starts with (chromium in \"chromium > cart.spec.ts > adds an item\") - null when the name has none, i.e. when its second part is not the test's own file.",
+         "type": [
+           "string",
+           "null"
+         ]
        },
        "days": {
          "description": "The period in days, ending at until.",
-         "anyOf": [
-           {
-             "type": "number"
-           },
-           {
-             "type": "null"
-           }
-         ],
-         "description": "failedRuns / runs, a fraction from 0 to 1. null only when runs is 0."
+         "description": "failedRuns / runs, a fraction from 0 to 1. null only when runs is 0.",
+         "type": [
+           "number",
+           "null"
+         ]
        },
        "filePath": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "type": "null"
-           }
+         "type": [
+           "string",
+           "null"
          ]
        },
        "flakyRate": {
-         "anyOf": [
-           {
-             "type": "number"
-           },
-           {
-             "type": "null"
-           }
-         ],
-         "description": "flakyRuns / runs, a fraction from 0 to 1. null only when runs is 0."
+         "description": "flakyRuns / runs, a fraction from 0 to 1. null only when runs is 0.",
+         "type": [
+           "number",
+           "null"
+         ]
        },
        "flakyRuns": {
          "description": "Of runs, those whose final attempt passed after at least one retry.",
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "The run's branch; null when its CI sent none."
+               "description": "The run's branch; null when its CI sent none.",
+               "type": [
+                 "string",
+                 "null"
+               ]
              },
              "result": {
                "description": "The run's final attempt - across all its shards - read through test.fail(): stable (passed on the first try), flaky (passed after at least one retry), failed, or skipped. A skipped run appears only here: it is not a run of the test, so it counts in neither runs nor any rate. A test the run's cancellation interrupted appears nowhere.",
-         "anyOf": [
-           {
-             "type": "number"
-           },
-           {
-             "type": "null"
-           }
-         ],
-         "description": "stableRuns / runs, a fraction from 0 to 1. null only when runs is 0."
+         "description": "stableRuns / runs, a fraction from 0 to 1. null only when runs is 0.",
+         "type": [
+           "number",
+           "null"
+         ]
        },
        "stableRuns": {
          "description": "Of runs, those whose final attempt passed on the first try.",
-                 "anyOf": [
-                   {
-                     "type": "string"
-                   },
-                   {
-                     "type": "null"
-                   }
+                 "type": [
+                   "string",
+                   "null"
                  ]
                },
                "count": {
--- pinned/squally-list-errors
+++ observed/squally-list-errors
  {
    "annotations": {
      "destructiveHint": false,
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
+               "type": [
+                 "string",
+                 "null"
                ]
              },
              "fingerprint": {
--- pinned/squally-list-tests
+++ observed/squally-list-tests
  {
    "annotations": {
      "destructiveHint": false,
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "type": "null"
-           }
-         ],
-         "description": "The branch filter applied; null for every branch."
+         "description": "The branch filter applied; null for every branch.",
+         "type": [
+           "string",
+           "null"
+         ]
        },
        "browser": {
-         "anyOf": [
-           {
-             "type": "string"
-           },
-           {
-             "type": "null"
-           }
-         ],
-         "description": "The browser filter applied; null for every test."
+         "description": "The browser filter applied; null for every test.",
+         "type": [
+           "string",
+           "null"
+         ]
        },
        "days": {
          "description": "The period in days, ending at until.",
-                 "anyOf": [
-                   {
-                     "type": "string"
-                   },
-                   {
-                     "type": "null"
-                   }
+                 "type": [
+                   "string",
+                   "null"
                  ]
                },
                "type": "array"
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "The Playwright project the name starts with (chromium in \"chromium > cart.spec.ts > adds an item\") - null when the name has none, i.e. when its second part is not the test's own file."
+               "description": "The Playwright project the name starts with (chromium in \"chromium > cart.spec.ts > adds an item\") - null when the name has none, i.e. when its second part is not the test's own file.",
+               "type": [
+                 "string",
+                 "null"
+               ]
              },
              "failedRuns": {
                "description": "Of runs, those whose final attempt failed.",
-               "anyOf": [
-                 {
-                   "type": "number"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "failedRuns / runs, a fraction from 0 to 1. null only when runs is 0."
+               "description": "failedRuns / runs, a fraction from 0 to 1. null only when runs is 0.",
+               "type": [
+                 "number",
+                 "null"
+               ]
              },
              "filePath": {
-               "anyOf": [
-                 {
-                   "type": "string"
-                 },
-                 {
-                   "type": "null"
-                 }
+               "type": [
+                 "string",
+                 "null"
                ]
              },
              "flakyRate": {
-               "anyOf": [
-                 {
-                   "type": "number"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "flakyRuns / runs, a fraction from 0 to 1. null only when runs is 0."
+               "description": "flakyRuns / runs, a fraction from 0 to 1. null only when runs is 0.",
+               "type": [
+                 "number",
+                 "null"
+               ]
              },
              "flakyRuns": {
                "description": "Of runs, those whose final attempt passed after at least one retry.",
-                     "anyOf": [
-                       {
-                         "type": "string"
-                       },
-                       {
-                         "type": "null"
-                       }
-                     ],
-                     "description": "The run's branch; null when its CI sent none."
+                     "description": "The run's branch; null when its CI sent none.",
+                     "type": [
+                       "string",
+                       "null"
+                     ]
                    },
                    "result": {
                      "description": "The run's final attempt - across all its shards - read through test.fail(): stable (passed on the first try), flaky (passed after at least one retry), failed, or skipped. A skipped run appears only here: it is not a run of the test, so it counts in neither runs nor any rate. A test the run's cancellation interrupted appears nowhere.",
-               "anyOf": [
-                 {
-                   "type": "number"
-                 },
-                 {
-                   "type": "null"
-                 }
-               ],
-               "description": "stableRuns / runs, a fraction from 0 to 1. null only when runs is 0."
+               "description": "stableRuns / runs, a fraction from 0 to 1. null only when runs is 0.",
+               "type": [
+                 "number",
+                 "null"
+               ]
              },
              "stableRuns": {
                "description": "Of runs, those whose final attempt passed on the first try.",
-                       "anyOf": [
-                         {
-                           "type": "string"
-                         },
-                         {
-                           "type": "null"
-                         }
+                       "type": [
+                         "string",
+                         "null"
                        ]
                      },
                      "count": {

Changed 2026-10-23 11:45 UTC

3 descriptions rewritten.

--- pinned/squally-get-test-metrics
+++ observed/squally-get-test-metrics
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "One test's numbers over a period: runs, stability (runs that passed on the first try / runs), flakyRate (runs that passed only after a retry / runs), failureRate (failed runs / runs), time lost to retries and failures, its last 20 runs (each with the run id squally-find-run gives; runs it skipped included, as result \"skipped\" - shown, never counted in runs or any rate) and the branches it ran on. Counts the finished CI runs of the period - a sharded run counts once, by its first shard's start - without runs that were a mass failure as a whole; source=local or source=all counts local runs or both instead (population names which). A run still in progress counts once all its shards have finished, or once the run timeout has passed, with the results its shards reported - also when a shard was stopped by the monthly result limit. There is no verdict - the tool returns the numbers and you judge them. runs = 0 with null rates is a valid answer: no counted run of this test in the period. Cheap; for one test use this, not squally-list-tests.",
+   "description": "One test's numbers over a period: runs, stability (runs that passed on the first try / runs), flakyRate (runs that passed only after a retry / runs), failureRate (failed runs / runs), time lost to retries and failures, its last 20 runs (each with the run id squally-find-run gives; runs it skipped included, as result \"skipped\" - shown, never counted in runs or any rate) and the branches it ran on. Counts the finished runs of the period, CI and local - a sharded run counts once, by its first shard's start - without runs that were a mass failure as a whole; source=ci or source=local counts only those instead (population names which). A run still in progress counts once all its shards have finished, or once the run timeout has passed, with the results its shards reported - also when a shard was stopped by the monthly result limit. There is no verdict - the tool returns the numbers and you judge them. runs = 0 with null rates is a valid answer: no counted run of this test in the period. Cheap; for one test use this, not squally-list-tests.",
    "inputSchema": {
      "additionalProperties": false,
      "properties": {
-         "default": "ci",
-         "description": "Which runs count, by where they ran: ci - runs a shard reported a CI provider for (the default); local - runs no shard did; all - both. The response's population names the one counted.",
+         "default": "all",
+         "description": "Which runs count, by where they ran: all - every run (the default since 1.0.0-beta.18; ci before); ci - runs a shard reported a CI provider for; local - runs no shard did. The response's population names the one counted.",
          "enum": [
            "ci",
            "local",
-         "description": "Which runs every number counts: runs whose shards all finished, each counted once however many shards it ran in, placed in the period by the start of their first shard - without runs that were a mass failure as a whole (at least 20 tests, over 80% of them failed). Every branch unless the branch parameter names one. A run finishes when all its shards have, or - once it is overdue by the project's run timeout, counted from its latest shard's start - when every shard that started has completed, timed out or been stopped by the monthly result limit; such a run counts like a cancelled one, with the results its shards reported (since 1.0.0-beta.10; the monthly result limit since 1.0.0-beta.11). Runs still running are not counted. The prefix names the source parameter: ci_ - CI runs (a shard reported a CI provider), the default; local_ - runs no shard reported a CI provider for; all_ - both (since 1.0.0-beta.8; before it, ci_groups_finished_not_mass_failure was the only value, and since 1.0.0-beta.6 - it was ci_completed_not_excluded, which counted every completed shard on its own).",
+         "description": "Which runs every number counts: runs whose shards all finished, each counted once however many shards it ran in, placed in the period by the start of their first shard - without runs that were a mass failure as a whole (at least 20 tests, over 80% of them failed). Every branch unless the branch parameter names one. A run finishes when all its shards have, or - once it is overdue by the project's run timeout, counted from its latest shard's start - when every shard that started has completed, timed out or been stopped by the monthly result limit; such a run counts like a cancelled one, with the results its shards reported (since 1.0.0-beta.10; the monthly result limit since 1.0.0-beta.11). Runs still running are not counted. The prefix names the source parameter: ci_ - CI runs (a shard reported a CI provider); local_ - runs no shard reported a CI provider for; all_ - both, the default since 1.0.0-beta.18 (ci_ before it; since 1.0.0-beta.8; before it, ci_groups_finished_not_mass_failure was the only value, and since 1.0.0-beta.6 - it was ci_completed_not_excluded, which counted every completed shard on its own).",
          "enum": [
            "ci_groups_finished_not_mass_failure",
            "local_groups_finished_not_mass_failure",
--- pinned/squally-list-errors
+++ observed/squally-list-errors
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "The project's error signatures in a period: failures grouped by fingerprint, with how often and how recently each occurred. Answers 'is this failure one instance of something that keeps happening' - a grouping no agent can compute from the repository alone. Counts finished CI runs by default (source=local or all for the others), a sharded run once, mass-failure runs included; failedCount and flakyCount say how the runs ended for the tests the error hit.",
+   "description": "The project's error signatures in a period: failures grouped by fingerprint, with how often and how recently each occurred. Answers 'is this failure one instance of something that keeps happening' - a grouping no agent can compute from the repository alone. Counts finished runs, CI and local, by default (source=ci or source=local for one of them), a sharded run once, mass-failure runs included; failedCount and flakyCount say how the runs ended for the tests the error hit.",
    "inputSchema": {
      "additionalProperties": false,
      "properties": {
-         "default": "ci",
-         "description": "Which runs count, by where they ran: ci - runs a shard reported a CI provider for (the default); local - runs no shard did; all - both. The response's population names the one counted.",
+         "default": "all",
+         "description": "Which runs count, by where they ran: all - every run (the default since 1.0.0-beta.18; ci before); ci - runs a shard reported a CI provider for; local - runs no shard did. The response's population names the one counted.",
          "enum": [
            "ci",
            "local",
-         "description": "Which runs every error figure counts: runs whose shards all finished, each counted once however many shards it ran in, placed in the period by the start of their first shard - runs that were a mass failure as a whole included (see massFailureRunCount). A run finishes when all its shards have, or - once it is overdue by the project's run timeout, counted from its latest shard's start - when every shard that started has completed, timed out or been stopped by the monthly result limit; such a run counts like a cancelled one, with the results its shards reported (since 1.0.0-beta.10; the monthly result limit since 1.0.0-beta.11). Runs still running are not counted. The prefix names the source parameter: ci_ - CI runs (a shard reported a CI provider), the default; local_ - runs no shard reported a CI provider for; all_ - both (since 1.0.0-beta.9).",
+         "description": "Which runs every error figure counts: runs whose shards all finished, each counted once however many shards it ran in, placed in the period by the start of their first shard - runs that were a mass failure as a whole included (see massFailureRunCount). A run finishes when all its shards have, or - once it is overdue by the project's run timeout, counted from its latest shard's start - when every shard that started has completed, timed out or been stopped by the monthly result limit; such a run counts like a cancelled one, with the results its shards reported (since 1.0.0-beta.10; the monthly result limit since 1.0.0-beta.11). Runs still running are not counted. The prefix names the source parameter: ci_ - CI runs (a shard reported a CI provider); local_ - runs no shard reported a CI provider for; all_ - both, the default since 1.0.0-beta.18 (ci_ before it; since 1.0.0-beta.9).",
          "enum": [
            "ci_groups_finished",
            "local_groups_finished",
--- pinned/squally-list-tests
+++ observed/squally-list-tests
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Every test with a counted CI run in the period (or local run, with source), with the same numbers per test as squally-get-test-metrics - runs, stability, flakyRate, failureRate, time lost - ranked worst first by the chosen sort (default: lowest stability). There is no verdict and no status - the tool labels no test; you judge the numbers. Moderate - two queries over the period, paged; for a single test use squally-get-test-metrics.",
+   "description": "Every test with a counted run in the period, CI and local (source=ci or source=local narrows it), with the same numbers per test as squally-get-test-metrics - runs, stability, flakyRate, failureRate, time lost - ranked worst first by the chosen sort (default: lowest stability). There is no verdict and no status - the tool labels no test; you judge the numbers. Moderate - two queries over the period, paged; for a single test use squally-get-test-metrics.",
    "inputSchema": {
      "additionalProperties": false,
      "properties": {
-         "default": "ci",
-         "description": "Which runs count, by where they ran: ci - runs a shard reported a CI provider for (the default); local - runs no shard did; all - both. The response's population names the one counted.",
+         "default": "all",
+         "description": "Which runs count, by where they ran: all - every run (the default since 1.0.0-beta.18; ci before); ci - runs a shard reported a CI provider for; local - runs no shard did. The response's population names the one counted.",
          "enum": [
            "ci",
            "local",
-         "description": "Which runs every number counts: runs whose shards all finished, each counted once however many shards it ran in, placed in the period by the start of their first shard - without runs that were a mass failure as a whole (at least 20 tests, over 80% of them failed). Every branch unless the branch parameter names one. A run finishes when all its shards have, or - once it is overdue by the project's run timeout, counted from its latest shard's start - when every shard that started has completed, timed out or been stopped by the monthly result limit; such a run counts like a cancelled one, with the results its shards reported (since 1.0.0-beta.10; the monthly result limit since 1.0.0-beta.11). Runs still running are not counted. The prefix names the source parameter: ci_ - CI runs (a shard reported a CI provider), the default; local_ - runs no shard reported a CI provider for; all_ - both (since 1.0.0-beta.8; before it, ci_groups_finished_not_mass_failure was the only value, and since 1.0.0-beta.6 - it was ci_completed_not_excluded, which counted every completed shard on its own).",
+         "description": "Which runs every number counts: runs whose shards all finished, each counted once however many shards it ran in, placed in the period by the start of their first shard - without runs that were a mass failure as a whole (at least 20 tests, over 80% of them failed). Every branch unless the branch parameter names one. A run finishes when all its shards have, or - once it is overdue by the project's run timeout, counted from its latest shard's start - when every shard that started has completed, timed out or been stopped by the monthly result limit; such a run counts like a cancelled one, with the results its shards reported (since 1.0.0-beta.10; the monthly result limit since 1.0.0-beta.11). Runs still running are not counted. The prefix names the source parameter: ci_ - CI runs (a shard reported a CI provider); local_ - runs no shard reported a CI provider for; all_ - both, the default since 1.0.0-beta.18 (ci_ before it; since 1.0.0-beta.8; before it, ci_groups_finished_not_mass_failure was the only value, and since 1.0.0-beta.6 - it was ci_completed_not_excluded, which counted every completed shard on its own).",
          "enum": [
            "ci_groups_finished_not_mass_failure",
            "local_groups_finished_not_mass_failure",

Changed 2026-10-22 11:55 UTC

3 schema or annotation changes with the description left byte-identical.

--- pinned/squally-find-run
+++ observed/squally-find-run
  {
    "annotations": {
      "destructiveHint": false,
-               "description": "Whether the run is settled: its status and counts are final and it counts in the dashboard's figures. false while a shard is running, and while an incomplete run still waits for a shard within the run time limit - once that passes, the hourly check settles it as incomplete. The dashboard's unfinished runs are the ones not settled. Since 1.0.0-beta.15.",
+               "description": "Whether the run is settled: its status and counts are final and it counts in the dashboard's figures. false while a shard is running, and while the run still waits for a shard within the run time limit - once that passes, the hourly check settles it as incomplete. The dashboard's unfinished runs are the ones not settled. Since 1.0.0-beta.15.",
                "type": "boolean"
              },
              "shards": {
-               "description": "How the run ended, the dashboard's own word: cancelled - the run was cancelled (for a sharded run, any shard recorded a cancel; cancellation says how and when); incomplete - a shard timed out, was stopped by the monthly result limit or never reported; running - a shard is still running; failed - every shard finished and a test failed; passed - every shard finished and none failed. In that order: the first that applies. Since 1.0.0-beta.14 - before it, a cancelled run reported the outcome beneath the cancel and a cancelled boolean.",
+               "description": "How the run ended, the dashboard's own word: cancelled - the run was cancelled (for a sharded run, any shard recorded a cancel; cancellation says how and when); incomplete - a shard timed out, was stopped by the monthly result limit, or never reported by the time the run is overdue by the project's run timeout, counted from its latest shard's start; running - a shard is still running, or the run still waits for a shard within that time; failed - every shard finished and a test failed; passed - every shard finished and none failed. In that order: the first that applies. Since 1.0.0-beta.14 - before it, a cancelled run reported the outcome beneath the cancel and a cancelled boolean. Waiting for a shard is running since 2026-10-20 - before it, incomplete.",
                "enum": [
                  "passed",
                  "failed",
-       "stableBranch": {
-         "type": "string"
-       },
        "total": {
          "type": "integer"
        },
-       "stableBranch",
        "runs",
        "total",
        "nextCursor",
--- pinned/squally-get-run
+++ observed/squally-get-run
  {
    "annotations": {
      "destructiveHint": false,
-             "description": "Whether the run is settled: its status and counts are final and it counts in the dashboard's figures. false while a shard is running, and while an incomplete run still waits for a shard within the run time limit - once that passes, the hourly check settles it as incomplete. The dashboard's unfinished runs are the ones not settled. Since 1.0.0-beta.15.",
+             "description": "Whether the run is settled: its status and counts are final and it counts in the dashboard's figures. false while a shard is running, and while the run still waits for a shard within the run time limit - once that passes, the hourly check settles it as incomplete. The dashboard's unfinished runs are the ones not settled. Since 1.0.0-beta.15.",
              "type": "boolean"
            },
            "shards": {
-             "description": "How the run ended, the dashboard's own word: cancelled - the run was cancelled (for a sharded run, any shard recorded a cancel; cancellation says how and when); incomplete - a shard timed out, was stopped by the monthly result limit or never reported; running - a shard is still running; failed - every shard finished and a test failed; passed - every shard finished and none failed. In that order: the first that applies. Since 1.0.0-beta.14 - before it, a cancelled run reported the outcome beneath the cancel and a cancelled boolean.",
+             "description": "How the run ended, the dashboard's own word: cancelled - the run was cancelled (for a sharded run, any shard recorded a cancel; cancellation says how and when); incomplete - a shard timed out, was stopped by the monthly result limit, or never reported by the time the run is overdue by the project's run timeout, counted from its latest shard's start; running - a shard is still running, or the run still waits for a shard within that time; failed - every shard finished and a test failed; passed - every shard finished and none failed. In that order: the first that applies. Since 1.0.0-beta.14 - before it, a cancelled run reported the outcome beneath the cancel and a cancelled boolean. Waiting for a shard is running since 2026-10-20 - before it, incomplete.",
              "enum": [
                "passed",
                "failed",
--- pinned/squally-list-projects
+++ observed/squally-list-projects
  {
    "annotations": {
      "destructiveHint": false,
-             },
-             "stableBranch": {
-               "type": "string"
              }
            },
            "required": [
-             "stableBranch",
              "createdAt"
            ],
            "type": "object"

Changed 2026-10-18 11:02 UTC

1 description rewritten, 1 schema or annotation change with the description left byte-identical.

--- pinned/squally-debug-failure
+++ observed/squally-debug-failure
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Every attempt of one test in one run, oldest first, each with the error, the stack and the Copy-for-AI prompt (the same text the Squally UI puts on the clipboard). This is the tool for 'why did this test fail'. If the test name is ambiguous, pass filePath.",
+   "description": "Every attempt of one test in one run, oldest first, each with the error, the stack and the full-context prompt (the same text Copy the full context puts on the clipboard in Squally's Debug with AI panel). This is the tool for 'why did this test fail'. If the test name is ambiguous, pass filePath.",
    "inputSchema": {
      "additionalProperties": false,
      "properties": {
-               "description": "A prompt for an assistant that has the repository open, byte-identical to the Copy for AI button. null for an attempt without a real failure (a pass, a test.fail() marker, no error text)."
+               "description": "A prompt for an assistant that has the repository open, byte-identical to the text that Copy the full context puts on the clipboard (Debug with AI on the attempt page). null for an attempt without a real failure (a pass, a test.fail() marker, no error text)."
              },
              "durationMs": {
                "anyOf": [
--- pinned/squally-list-errors
+++ observed/squally-list-errors
  {
    "annotations": {
      "destructiveHint": false,
-   "title": "List error signatures"
+   "title": "List errors"
  }

Changed 2026-10-06 13:32 UTC

3 descriptions rewritten, 1 schema or annotation change with the description left byte-identical.

--- pinned/squally-debug-failure
+++ observed/squally-debug-failure
  {
    "annotations": {
      "destructiveHint": false,
-               "description": "The shard the test's final attempt ran in; null for an unsharded run. One row per test since 1.0.0-beta.12 - a test reported from two shards was one row per shard before."
+               "description": "The shard this attempt ran in; null for an unsharded run."
              },
              "status": {
                "type": "string"
--- pinned/squally-find-run
+++ observed/squally-find-run
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Finds runs of a project, CI and local alike - the latest, or filtered by branch, commit SHA, status or source (all by default; ci or local narrows it, and each run says local). Status is passed, failed, cancelled, incomplete or running. One row per logical run: a sharded run is collapsed into a single entry, its counters over all its shards. Returns summary counters only; use squally-get-run for the per-test rows.",
+   "description": "Finds runs of a project, CI and local alike - the latest, or filtered by branch, commit SHA, status or source (all by default; ci or local narrows it, and each run says local). Status is passed, failed, cancelled, incomplete or running; settled is false while the run can still change. One row per logical run: a sharded run is collapsed into a single entry, its counters over all its shards; each job of a CI run that sets a job key is its own run (jobKey). attempt and rerunOf say which attempt of its CI run it is and which run it re-ran; ciRunUrl links the CI run. Returns summary counters only; use squally-get-run for the per-test rows.",
    "inputSchema": {
      "additionalProperties": false,
      "properties": {
+             "attempt": {
+               "anyOf": [
+                 {
+                   "type": "integer"
+                 },
+                 {
+                   "type": "null"
+                 }
+               ],
+               "description": "Which attempt of its CI run this is - GitHub Actions' run attempt, 2 after Re-run failed jobs. null when the reporter did not say and the run id did not show it. Since 1.0.0-beta.15."
+             },
              "branch": {
                "anyOf": [
                  {
+             "ciRunUrl": {
+               "anyOf": [
+                 {
+                   "type": "string"
+                 },
+                 {
+                   "type": "null"
+                 }
+               ],
+               "description": "The CI run's page - the run page's View in CI link: the URL the reporter sent (squally-reporter 0.11.0; GitHub Actions links the attempt), else for GitHub Actions one built from the project's linked repository when it has exactly one. https only; null when neither applies. Since 1.0.0-beta.15."
+             },
              "commitSha": {
                "anyOf": [
                  {
+             "jobKey": {
+               "anyOf": [
+                 {
+                   "type": "string"
+                 },
+                 {
+                   "type": "null"
+                 }
+               ],
+               "description": "The job key the reporter sent (SQUALLY_CI_JOB_KEY, squally-reporter 0.11.0): which job of a CI run this is, for example the browser of a matrix. Each job is its own run with its own GitHub check, Squally · <key>. null when the job set none. Since 1.0.0-beta.15."
+             },
              "local": {
                "description": "No shard of the run reported a CI provider: a local run (since 1.0.0-beta.14). GET /runs lists both kinds unless source says otherwise.",
                "type": "boolean"
+             "rerunOf": {
+               "anyOf": [
+                 {
+                   "properties": {
+                     "id": {
+                       "description": "The earlier attempt's id - the one GET /runs/{runId} takes.",
+                       "type": "string"
+                     },
+                     "runNumber": {
+                       "type": "integer"
+                     }
+                   },
+                   "required": [
+                     "id",
+                     "runNumber"
+                   ],
+                   "type": "object"
+                 },
+                 {
+                   "type": "null"
+                 }
+               ],
+               "description": "The run this one re-ran: the latest earlier attempt of the same CI run (and job key) that reported to Squally. null for a first attempt, when the earlier attempt never reported, or once retention deleted it. Since 1.0.0-beta.15."
+             },
              "runNumber": {
                "type": "integer"
              },
+             "settled": {
+               "description": "Whether the run is settled: its status and counts are final and it counts in the dashboard's figures. false while a shard is running, and while an incomplete run still waits for a shard within the run time limit - once that passes, the hourly check settles it as incomplete. The dashboard's unfinished runs are the ones not settled. Since 1.0.0-beta.15.",
+               "type": "boolean"
+             },
              "shards": {
                "anyOf": [
                  {
-                       ]
+                       ],
+                       "description": "How many shards the run waits for: the shard total the CI run declared - for a re-run, the shards it re-ran (those that had not passed before it; the others are not run again and do not report). null when no shard declared a total. The run is complete when every expected shard has completed."
                      },
                      "received": {
+                       "description": "How many shards reported.",
                        "type": "integer"
                      }
                    },
+             "settled",
+             "jobKey",
+             "attempt",
+             "rerunOf",
+             "ciRunUrl",
              "startedAt",
              "finishedAt",
              "durationMs",
--- pinned/squally-get-run
+++ observed/squally-get-run
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "One run with its per-test result rows, across every shard. Use this to find out which test is red in a run; the run list carries only the counters. Its status is cancelled for a cancelled run (cancellation says how and when), and local says it ran without CI.",
+   "description": "One run with its per-test result rows, across every shard. Use this to find out which test is red in a run; the run list carries only the counters. Its status is cancelled for a cancelled run (cancellation says how and when), and local says it ran without CI. Like squally-find-run it carries settled, jobKey, attempt, rerunOf and ciRunUrl - for a re-run, rerunOf.id is the run it re-ran, to compare with.",
    "inputSchema": {
      "additionalProperties": false,
      "properties": {
+           "attempt": {
+             "anyOf": [
+               {
+                 "type": "integer"
+               },
+               {
+                 "type": "null"
+               }
+             ],
+             "description": "Which attempt of its CI run this is - GitHub Actions' run attempt, 2 after Re-run failed jobs. null when the reporter did not say and the run id did not show it. Since 1.0.0-beta.15."
+           },
            "authorName": {
              "anyOf": [
                {
+           "ciRunUrl": {
+             "anyOf": [
+               {
+                 "type": "string"
+               },
+               {
+                 "type": "null"
+               }
+             ],
+             "description": "The CI run's page - the run page's View in CI link: the URL the reporter sent (squally-reporter 0.11.0; GitHub Actions links the attempt), else for GitHub Actions one built from the project's linked repository when it has exactly one. https only; null when neither applies. Since 1.0.0-beta.15."
+           },
            "commitMessage": {
              "anyOf": [
                {
+           "jobKey": {
+             "anyOf": [
+               {
+                 "type": "string"
+               },
+               {
+                 "type": "null"
+               }
+             ],
+             "description": "The job key the reporter sent (SQUALLY_CI_JOB_KEY, squally-reporter 0.11.0): which job of a CI run this is, for example the browser of a matrix. Each job is its own run with its own GitHub check, Squally · <key>. null when the job set none. Since 1.0.0-beta.15."
+           },
            "local": {
              "description": "No shard of the run reported a CI provider: a local run (since 1.0.0-beta.14). GET /runs lists both kinds unless source says otherwise.",
              "type": "boolean"
+           "rerunOf": {
+             "anyOf": [
+               {
+                 "properties": {
+                   "id": {
+                     "description": "The earlier attempt's id - the one GET /runs/{runId} takes.",
+                     "type": "string"
+                   },
+                   "runNumber": {
+                     "type": "integer"
+                   }
+                 },
+                 "required": [
+                   "id",
+                   "runNumber"
+                 ],
+                 "type": "object"
+               },
+               {
+                 "type": "null"
+               }
+             ],
+             "description": "The run this one re-ran: the latest earlier attempt of the same CI run (and job key) that reported to Squally. null for a first attempt, when the earlier attempt never reported, or once retention deleted it. Since 1.0.0-beta.15."
+           },
            "runNumber": {
              "type": "integer"
            },
+           "settled": {
+             "description": "Whether the run is settled: its status and counts are final and it counts in the dashboard's figures. false while a shard is running, and while an incomplete run still waits for a shard within the run time limit - once that passes, the hourly check settles it as incomplete. The dashboard's unfinished runs are the ones not settled. Since 1.0.0-beta.15.",
+             "type": "boolean"
+           },
            "shards": {
              "anyOf": [
                {
-                     ]
+                     ],
+                     "description": "How many shards the run waits for: the shard total the CI run declared - for a re-run, the shards it re-ran (those that had not passed before it; the others are not run again and do not report). null when no shard declared a total. The run is complete when every expected shard has completed."
                    },
                    "received": {
                      "items": {
+           "settled",
+           "jobKey",
+           "attempt",
+           "rerunOf",
+           "ciRunUrl",
            "startedAt",
            "finishedAt",
            "durationMs",
--- pinned/squally-get-test-metrics
+++ observed/squally-get-test-metrics
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "One test's numbers over a period: runs, stability (runs that passed on the first try / runs), flakyRate (runs that passed only after a retry / runs), failureRate (failed runs / runs), time lost to retries and failures, its last 20 runs (each with the run id squally-find-run gives; runs it skipped included, as result \"skipped\" - shown, never counted in runs or any rate) and the branches it ran on. Counts the finished CI runs of the period - a sharded run counts once, by its first shard's start - without runs that were a mass failure as a whole; source=local or source=all counts local runs or both instead (population names which). A run still in progress counts once all its shards have finished, or once the run timeout has passed, with the results its shards reported - also when a shard was stopped by the monthly result limit. There is no verdict - the tool returns the numbers and you judge them. runs = 0 with null rates is a valid answer: no counted CI run of this test in the period. Cheap; for one test use this, not squally-list-tests.",
+   "description": "One test's numbers over a period: runs, stability (runs that passed on the first try / runs), flakyRate (runs that passed only after a retry / runs), failureRate (failed runs / runs), time lost to retries and failures, its last 20 runs (each with the run id squally-find-run gives; runs it skipped included, as result \"skipped\" - shown, never counted in runs or any rate) and the branches it ran on. Counts the finished CI runs of the period - a sharded run counts once, by its first shard's start - without runs that were a mass failure as a whole; source=local or source=all counts local runs or both instead (population names which). A run still in progress counts once all its shards have finished, or once the run timeout has passed, with the results its shards reported - also when a shard was stopped by the monthly result limit. There is no verdict - the tool returns the numbers and you judge them. runs = 0 with null rates is a valid answer: no counted run of this test in the period. Cheap; for one test use this, not squally-list-tests.",
    "inputSchema": {
      "additionalProperties": false,
      "properties": {

Current tools

Show all 7 tool fingerprints
squally-debug-failure
05f052a126cb6aec
squally-find-run
6400b7b01132aabc
squally-get-run
69d56107bcb0758c
squally-get-test-metrics
c7d75196c263dbc4
squally-list-errors
ee207ccdb7e56af2
squally-list-projects
a2d1b6f7f3d8afb1
squally-list-tests
597e33d723e9ad3c

Watch this server yourself

If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.

npx -y mcp-pin@0.2.3 -- <your squally-mcp command>

Or subscribe to this page's RSS feed to be told when it changes.

Badge

mcp-pin status badge for squally-mcp

The badge states one fact about time and nothing else. It never claims a server is safe.

[![mcp-pin](https://mcp-pin.gautamkhosla.com/badge/375520a41dabeb7e.svg)](https://mcp-pin.gautamkhosla.com/servers/375520a41dabeb7e.html)