Server definition
- Hash
- sha256:ea454f95fc17d0fa8ddedf67a3659da0651b79a0d4c7b696468a659394adfa9d
- What it is
- What a remote MCP server returned when asked what it offers: 8 tools
The blob, as servednamed by its sha256
{
"instructions": "Manage the user's servers through Termalin: hosts_list shows the reachable servers, ssh_exec runs a command, sftp_list/read/write handle files. Servers are reached keylessly through the user's Termalin Connectors.",
"tools": [
{
"description": "Run a database query on one of your servers — passwordless. It executes the engine's own client on the host over Termalin's keyless tunnel, using the database's local trust (Postgres peer auth via `sudo -u postgres`, MySQL/MariaDB unix-socket via `sudo mysql`, redis-cli, mongosh, sqlite3) — so no database password is needed or stored anywhere. Read-only by default: only SELECT/SHOW-style statements run unless allowWrites is set (full-access keys only). SQL engines return CSV/TSV with a header. For MongoDB pass a shell expression, e.g. db.products.find({}).limit(20).toArray().",
"inputSchema": {
"additionalProperties": false,
"properties": {
"allowWrites": {
"description": "Allow a non-read statement (full-access keys only; default false)",
"type": "boolean"
},
"database": {
"description": "Database name (for sqlite: the .db file path)",
"type": "string"
},
"engine": {
"description": "Database engine on that server (default postgres)",
"enum": [
"postgres",
"mysql",
"mariadb",
"redis",
"mongodb",
"sqlite"
],
"type": "string"
},
"host": {
"description": "Server id from hosts_list",
"type": "string"
},
"query": {
"description": "The statement / command / expression to run",
"type": "string"
},
"timeoutSeconds": {
"description": "Max seconds to wait (default 60). Calls longer than about 90 seconds are usually cut off by the network before they answer — run long jobs in the background instead.",
"type": "number"
},
"username": {
"description": "SSH login user (defaults to the tunnel's user, else root)",
"type": "string"
}
},
"required": [
"host",
"query"
],
"type": "object"
},
"name": "data_query",
"outputSchema": null
},
{
"description": "List the tables / collections / keys of a database on one of your servers — passwordless, over the same local-client path as data_query.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"database": {
"description": "Database name (for sqlite: the .db file path)",
"type": "string"
},
"engine": {
"description": "Database engine on that server (default postgres)",
"enum": [
"postgres",
"mysql",
"mariadb",
"redis",
"mongodb",
"sqlite"
],
"type": "string"
},
"host": {
"description": "Server id from hosts_list",
"type": "string"
},
"username": {
"description": "SSH login user (defaults to the tunnel's user, else root)",
"type": "string"
}
},
"required": [
"host"
],
"type": "object"
},
"name": "data_tables",
"outputSchema": null
},
{
"description": "Generate a strong random password — handy when creating a user or setting a password on a server. Returns the password only; nothing is stored.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"length": {
"description": "length (default 20, 8-128)",
"type": "integer"
}
},
"type": "object"
},
"name": "generate_password",
"outputSchema": null
},
{
"description": "List the servers reachable through Termalin (your tunnel agents). Returns id, name, whether the server is online, and the default login user. Use the id with ssh_exec.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "hosts_list",
"outputSchema": null
},
{
"description": "List a directory on one of your servers over SFTP. Returns each entry's name, whether it's a directory, size and modified time. Runs keyless over Termalin's tunnel, like ssh_exec.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"host": {
"description": "Server id from hosts_list",
"type": "string"
},
"path": {
"description": "Directory to list (default the login home, \".\")",
"type": "string"
},
"username": {
"description": "Login user (defaults to the tunnel's user, else root)",
"type": "string"
}
},
"required": [
"host"
],
"type": "object"
},
"name": "sftp_list",
"outputSchema": null
},
{
"description": "Read a text file from one of your servers over SFTP and return its contents. Files over 512 KB or non-text (binary) files are refused — use ssh_exec (e.g. sed/tail) for those.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"host": {
"description": "Server id from hosts_list",
"type": "string"
},
"path": {
"description": "Absolute or home-relative file path",
"type": "string"
},
"username": {
"description": "Login user (defaults to the tunnel's user, else root)",
"type": "string"
}
},
"required": [
"host",
"path"
],
"type": "object"
},
"name": "sftp_read",
"outputSchema": null
},
{
"description": "Create or overwrite a text file on one of your servers over SFTP. 'content' is written as UTF-8. Capped at 512 KB; for binary uploads use a terminal/scp instead.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"content": {
"description": "UTF-8 text to write",
"type": "string"
},
"host": {
"description": "Server id from hosts_list",
"type": "string"
},
"path": {
"description": "Destination file path (created or overwritten)",
"type": "string"
},
"username": {
"description": "Login user (defaults to the tunnel's user, else root)",
"type": "string"
}
},
"required": [
"host",
"path",
"content"
],
"type": "object"
},
"name": "sftp_write",
"outputSchema": null
},
{
"description": "Run a single shell command on one of your servers and return its combined output and exit code. Runs keyless over Termalin's tunnel — no SSH key, and the server needs no open inbound port. Each call is a fresh shell (cd does not persist — chain with &&). Keep a call under about 90 seconds: for anything longer, start it in the background (nohup … > log 2>&1 &) and check on it with later calls.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"command": {
"description": "Shell command to execute",
"type": "string"
},
"host": {
"description": "Server id from hosts_list",
"type": "string"
},
"timeoutSeconds": {
"description": "Max seconds to wait (default 60). Calls longer than about 90 seconds are usually cut off by the network before they answer — run long jobs in the background instead.",
"type": "number"
},
"username": {
"description": "Login user (defaults to the tunnel's user, else root)",
"type": "string"
}
},
"required": [
"host",
"command"
],
"type": "object"
},
"name": "ssh_exec",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:ea454f95fc17d0fa8ddedf67a3659da0651b79a0d4c7b696468a659394adfa9d | sha256sum