236 lines
10 KiB
Markdown
236 lines
10 KiB
Markdown
# 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.
|