mcp-calculator/docs/tools.md
2026-09-15 20:38:16 +02:00

236 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tool-Referenz
13 Tools, nach Fachgebiet gruppiert. Die Tools mit vielen Operationen (`calculus`,
`matrix`, `number_theory` …) nutzen ein `operation`-Enum. So bleibt die Tool-Liste
für das LLM überschaubar, und die Schemas bleiben trotzdem präzise.
Alle Tools sind `readOnly`, `idempotent` und `openWorld=false` annotiert. Clients können
sie also ohne Rückfrage freigeben (z. B. Cline `autoApprove`).
## Gemeinsame Konventionen
**Ausdrucks-Syntax** (für alle String-Ausdrücke):
| Schreibweise | Bedeutung |
|---|---|
| `x^2` oder `x**2` | Potenz |
| `2x`, `3(x+1)` | implizite Multiplikation |
| `5!` | Fakultät |
| `a % b`, `Mod(a, b)` | Modulo |
| `pi`, `e`, `I`, `oo` | π, Euler'sche Zahl, imaginäre Einheit, ∞ |
| `sin(30*deg)` | Grad (deg = π/180) |
| `ln(x)`, `log(x)`, `log(x, 2)`, `log10(x)` | Logarithmen |
| `sqrt`, `cbrt`, `root(x, n)`, `abs`, `floor`, `ceiling` | Wurzeln, Betrag, Runden |
| `sin cos tan …`, `asin`/`arcsin` …, `sinh …` | Trigonometrie |
| `factorial`, `binomial`, `gamma`, `erf`, `min`, `max`, `gcd`, `lcm` | Sonderfunktionen |
| `x^2 = 4` | Gleichung (genau ein `=`) |
| `x^2 < 4`, `<=`, `>`, `>=`, `!=` | Ungleichungen |
- Dezimalpunkt, kein Komma. Dezimalzahlen werden **exakt** als Brüche behandelt (`0.1 + 0.2 = 3/10`).
- Unicode wird normalisiert: `π × ÷ − ² ³ √ ∞ ≤ ≥ ≠`.
- Mehrbuchstabige Namen sind **ein** Symbol (`rate*time`, nicht `r*a*t*e`).
**Ergebnisse:**
- `result` bzw. `exact`: symbolisches Ergebnis in derselben Syntax, direkt als Eingabe für das nächste Tool verwendbar
- `latex`: für die Darstellung
- `numeric`: Dezimalwert als String, damit keine Präzision verloren geht
- Sehr lange Ergebnisse werden gekürzt (`MCP_CALC_MAX_OUTPUT_LENGTH`), große Ganzzahlen enthalten zusätzlich `digits`.
**Fehler** kommen als Tool-Fehler (`isError: true`) mit einer verständlichen Meldung zurück,
z. B. `matrix is singular (determinant 0) and has no inverse; try 'pseudo_inverse'`.
Das LLM kann darauf reagieren und den Aufruf korrigieren.
---
## evaluate
Wert exakt und dezimal berechnen, mit beliebiger Präzision.
| Parameter | Typ | Default | |
|---|---|---|---|
| `expression` | string | – | Ausdruck |
| `precision` | int | 15 | signifikante Stellen (1–1000) |
| `variables` | object | – | Werte einsetzen, z. B. `{"x": 2, "r": "1/3"}` |
```json
{"expression": "1000 * (1 + 0.05)^10", "precision": 12}
→ {"exact": "16679880978201/10240000000", "numeric": "1628.89462678", ...}
```
## transform
Symbolisch umformen.
| Parameter | Typ | Default | |
|---|---|---|---|
| `expression` | string | – | |
| `operation` | enum | `simplify` | `simplify`, `expand`, `factor`, `collect`, `cancel`, `apart`, `together`, `trigsimp`, `expand_trig`, `powsimp`, `expand_log`, `logcombine`, `radsimp`, `rationalize_denominator`, `nsimplify`, `substitute` |
| `variable` | string | – | Hauptvariable für `collect`, `apart`, `factor` |
| `substitutions` | object | – | für `substitute`: `{"x": "2t"}` |
| `assume` | enum | `none` | `none`, `real`, `positive`, `integer` |
`equivalent_to_input: true` bestätigt, dass die Umformung mathematisch identisch ist.
`nsimplify` findet geschlossene Formen zu Dezimalzahlen (`1.41421356…` → `sqrt(2)`).
## solve
Gleichungen, Gleichungssysteme, Ungleichungen.
| Parameter | Typ | Default | |
|---|---|---|---|
| `equations` | string \| string[] | – | eine Gleichung oder ein System; bloßer Ausdruck = `… = 0` |
| `variables` | string[] | alle freien | wonach aufgelöst wird |
| `domain` | enum | `complex` | `complex`, `real`, `positive`, `integer` |
| `numeric_only` | bool | false | numerisch lösen (Newton / Polynomwurzeln) |
| `initial_guess` | number[] | 1.0 je Variable | Startwerte für `numeric_only` |
| `precision` | int | 15 | |
- Endliche Lösungen: `solutions: [{"x": "2"}, {"x": "3"}]` plus `numeric`
- Periodische Lösungen (z. B. `sin(x) = 1/2`): `solution_set` als Menge plus `principal_solutions`
- Unterbestimmte Systeme: parametrisierte Lösung plus Hinweis in `note`
- Ungleichungen: `solution_set: "Interval.open(-2, 2)"`
- Transzendente Gleichungen ohne geschlossene Form: `numeric_only: true`
## calculus
| `operation` | benötigt | Ergebnis |
|---|---|---|
| `derivative` | `variable`, `order` | Ableitung; mehrere Variablen `"x, y"` = gemischte partielle Ableitung |
| `integral` | optional `lower`+`upper` | unbestimmt (+C-Hinweis) oder bestimmt; fällt numerisch zurück, wenn keine geschlossene Form existiert |
| `limit` | `point`, `direction` (`+-`, `+`, `-`) | Grenzwert |
| `series` | `point` (Default 0), `terms` | Taylorreihe mit O-Term, zusätzlich `polynomial` |
| `sum` / `product` | `lower`, `upper` (auch `oo`) | geschlossene Form oder numerisch; `converges` bei unendlichen Summen |
| `gradient`, `hessian` | `variable: "x, y"` | Vektor / Matrix |
| `jacobian` | `expression: "f1, f2"`, `variable: "x, y"` | Matrix |
Weitere Parameter: `assume`, `precision`.
## analyze_function
Komplette Kurvendiskussion einer reellen Funktion f(x) in einem Aufruf:
Definitionsbereich, f′/f″/f‴, Nullstellen, y-Achsenabschnitt, Extrema mit Art, Wendepunkte,
Symmetrie, Grenzverhalten ±∞, senkrechte Asymptoten, Monotonie- und Krümmungsintervalle.
Teilschritte, die sich nicht bestimmen lassen, liefern `"not determinable"`, statt den ganzen Aufruf scheitern zu lassen.
| Parameter | Default |
|---|---|
| `expression` | – |
| `variable` | `x` |
| `precision` | 10 |
## solve_ode
Gewöhnliche Differentialgleichungen, symbolisch gelöst.
| Parameter | Default | |
|---|---|---|
| `equation` | – | Strich-Notation: `"y'' + 2y' + y = sin(x)"` |
| `function` | `y` | Name der gesuchten Funktion |
| `variable` | `x` | unabhängige Variable |
| `initial_conditions` | – | `{"y(0)": 1, "y'(0)": 0}` |
Ohne Anfangsbedingungen kommt die allgemeine Lösung mit `C1, C2, …`. Zusätzlich wird das Lösungsverfahren (`method`) zurückgegeben.
## matrix
| Parameter | Default | |
|---|---|---|
| `operation` | – | siehe unten |
| `matrix` | – | Liste von Zeilen `[[1, 2], [3, 4]]`; Einträge dürfen Ausdrücke sein (`"1/3"`, `"a"`); flache Liste = Spaltenvektor |
| `other` | – | zweiter Operand bzw. rechte Seite `b` bei `solve` |
| `exponent` | – | für `power` |
| `numeric_mode` | false | Gleitkomma (NumPy) statt exakt |
Operationen (exakt): `determinant`, `inverse`, `transpose`, `rank`, `trace`, `rref`, `eigenvalues`,
`eigenvectors`, `characteristic_polynomial`, `diagonalize`, `nullspace`, `columnspace`, `multiply`, `add`,
`subtract`, `power`, `solve`, `dot`, `cross`, `norm`, `pseudo_inverse`.
Nur numerisch: `svd`, `condition_number`. Bei `numeric_mode` löst `solve` nicht-quadratische Systeme per Least Squares.
## statistics
Deskriptive Statistik: count, sum, mean, median, mode, min/max, range, variance, std_dev, Quartile, IQR,
Standardfehler, Variationskoeffizient, Schiefe, Exzess, geometrisches/harmonisches Mittel.
| Parameter | Default | |
|---|---|---|
| `data` | – | Zahlen |
| `sample` | true | Stichprobe (n−1) oder Grundgesamtheit (n) |
| `percentiles` | – | z. B. `[5, 95]` |
| `y` | – | gepaarte zweite Variable: Kovarianz, Pearson, Spearman |
## regression
| Parameter | Default | |
|---|---|---|
| `x`, `y` | – | Datenpunkte |
| `model` | `linear` | `linear`, `polynomial`, `exponential`, `logarithmic`, `power` |
| `degree` | 2 | für `polynomial` |
| `predict` | – | x-Werte für Vorhersagen |
Liefert Koeffizienten, Gleichung, R², RMSE; beim linearen Modell zusätzlich r, p-Wert und Standardfehler.
## probability
| Parameter | |
|---|---|
| `distribution` | `normal(mean, std)`, `t(df)`, `chi2(df)`, `f(dfn, dfd)`, `exponential(rate)`, `uniform(low, high)`, `lognormal(mu, sigma)`, `gamma(shape, scale)`, `beta(a, b)`, `binomial(n, p)`, `poisson(lambda)`, `geometric(p)`, `hypergeometric(population, successes, draws)`, `negative_binomial(successes, p)` |
| `operation` | `pdf` (Dichte bzw. P(X=x)), `cdf` P(X≤x), `sf` P(X>x), `between` P(lower<X≤upper), `quantile`, `interval`, `summary` |
| `parameters` | z. B. `{"n": 10, "p": 0.3}` |
| `x`, `lower`, `upper`, `q`, `confidence` | je nach Operation |
Das Feld `meaning` sagt genau, was berechnet wurde. Bei diskreten Verteilungen z. B.
`"P(X > 7) = P(X >= 8)"`. Das verhindert die typischen Off-by-one-Fehler von LLMs.
## hypothesis_test
| `test` | Eingaben |
|---|---|
| `one_sample_t` | `sample`, `mu` |
| `two_sample_t` | `sample`, `sample2`, `equal_variance` (Default Welch) |
| `paired_t` | `sample`, `sample2` |
| `one_way_anova` | `groups` |
| `mann_whitney` | `sample`, `sample2` |
| `wilcoxon` | `sample` + `sample2` oder `mu` |
| `chi2_goodness_of_fit` | `sample` (beobachtete Häufigkeiten), `expected` (Häufigkeiten oder Wahrscheinlichkeiten) |
| `chi2_independence` | `table` (Kontingenztafel), zusätzlich Cramér's V |
| `shapiro_wilk` | `sample` |
| `binomial` | `sample: [Erfolge, Versuche]`, `p` |
| `pearson_correlation` | `sample`, `sample2` |
Gemeinsam: `alternative` (`two-sided`, `less`, `greater`) und `alpha`. Ergebnis: Teststatistik,
p-Wert, gegebenenfalls Freiheitsgrade und Konfidenzintervall, `reject_null` und eine Schlussfolgerung im Klartext.
## number_theory
| `operation` | `values` |
|---|---|
| `gcd`, `lcm` | `[a, b, …]` |
| `factorize`, `is_prime`, `next_prime`, `previous_prime`, `divisors`, `totient`, `factorial`, `fibonacci` | `[n]` |
| `nth_prime` | `[k]` |
| `primes_in_range` | `[low, high]` |
| `mod` | `[a, m]` |
| `mod_pow` | `[base, exp, mod]` |
| `mod_inverse` | `[a, m]` |
| `crt` | Reste in `values`, Moduli in `moduli` |
| `binomial`, `permutations` | `[n, k]` |
| `continued_fraction` | `[x]` (z. B. `"415/93"`, `"sqrt(2)"`) |
| `base_convert` | `["ff"]` plus `from_base`, `to_base` (2–36) |
Ganzzahlen über 2^53 bitte als String übergeben. JSON-Zahlen verlieren sonst in manchen
Clients Stellen. Große Ergebnisse kommen ebenfalls als String zurück.
## convert_units
| Parameter | Default | |
|---|---|---|
| `quantity` | – | `"100 km/h"`, `"25 degC"`, `"5 km/h * 2 h"`, `"1.5 kg * 9.81 m/s^2"` |
| `to_unit` | – | Zieleinheit; ohne Angabe SI-Basiseinheiten plus `compact` |
| `precision` | 12 | |
Die Dimensionen werden geprüft (`kg` → `m` ergibt einen Fehler). Unterstützt werden SI- und imperiale Einheiten, Präfixe,
Temperaturen, Datengrößen (`B`, `KiB`, `MB`), Energie, Druck usw. (Pint-Einheitenregister).
## Ressource `calculator://syntax`
Kurzreferenz der Syntax und Verteilungen als Text. Dieselbe Information steckt auch in den
Server-`instructions`, die jeder Client beim Verbindungsaufbau erhält.