Ubuntu MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HTTP_HOST | No | Bind address for streamable-http. | 127.0.0.1 |
| MCP_HTTP_PORT | No | Bind port for streamable-http. | 8765 |
| MCP_TRANSPORT | No | stdio (local, client-launched) or streamable-http (remote). | stdio |
| MCP_WORKSPACE | No | Sandbox root. Every filesystem/git/code tool is confined here. | ./workspace |
| MCP_HTTP_TIMEOUT | No | Default fetch_url timeout, seconds. | 10 |
| MCP_MAX_FILE_SIZE | No | Max file size for read/write/append, in bytes. | 10485760 |
| MCP_MAX_RESPONSE_SIZE | No | Max bytes fetch_url will buffer. | 5242880 |
| MCP_ALLOW_PRIVATE_NETWORK | No | Set true to let fetch_url/check_connectivity reach private/loopback hosts. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| read_fileA | Read a UTF-8 (or other specified encoding) text file from the workspace. Args: path: Path to the file, relative to the workspace root. encoding: Text encoding to decode with (default "utf-8"). Returns: The file's path, size in bytes, encoding, and full text content. Fails if the file does not exist, isn't a file, exceeds the configured max file size, or isn't valid text in that encoding. |
| write_fileA | Create or overwrite a text file inside the workspace. Args: path: Destination path, relative to the workspace root. Parent directories are created automatically. content: Text content to write (UTF-8). overwrite: If False and the file already exists, fails instead of overwriting it. Returns: The path and number of bytes written. |
| append_fileA | Append text to an existing file inside the workspace. Args: path: Path to an existing file, relative to the workspace root. content: Text to append. Returns: The path and number of bytes appended. Fails if the file does not exist or if appending would exceed the max file size. |
| delete_fileA | Delete a single file inside the workspace. Args: path: Path to the file to delete, relative to the workspace root. Returns: The deleted path. Fails if the path does not exist or is a directory (use delete_directory for directories). |
| copy_fileA | Copy a file within the workspace, preserving metadata. Args: source: Existing file path, relative to the workspace root. destination: Destination path; parent directories are created automatically. |
| move_fileB | Move or rename a file within the workspace. Args: source: Existing file path, relative to the workspace root. destination: New path; parent directories are created automatically. |
| file_existsA | Check whether a given path exists and is a regular file. Args: path: Path to check, relative to the workspace root. |
| get_file_infoA | Get metadata about a file: size, modified/created time, extension. Args: path: Path to the file, relative to the workspace root. |
| list_directoryA | List the contents of a directory inside the workspace. Args: path: Directory to list, relative to the workspace root (default: the workspace root itself). recursive: If True, walk subdirectories too (capped by MCP_MAX_DIRECTORY_DEPTH). Returns: Each entry's name, relative path, whether it's a file or directory, and file size when applicable. |
| create_directoryB | Create a directory (and any missing parent directories) in the workspace. Args: path: Directory path to create, relative to the workspace root. |
| delete_directoryA | Delete a directory inside the workspace. Args: path: Directory to delete, relative to the workspace root. recursive: Required to be True to delete a non-empty directory and everything inside it. The workspace root itself can never be deleted. |
| directory_existsA | Check whether a given path exists and is a directory. Args: path: Path to check, relative to the workspace root. |
| find_filesA | Recursively find files under a directory matching a glob pattern. Args: path: Directory to search under, relative to the workspace root. pattern: Filename glob, e.g. ".py" or ".md" (matched against the filename only, not the full path). Returns: Up to 500 matching relative file paths. |
| get_directory_sizeA | Recursively calculate the total size of a directory's contents. Args: path: Directory to measure, relative to the workspace root. Returns: Total size in bytes and megabytes, plus the number of files counted. |
| get_system_infoA | Get basic host information: OS, kernel release, architecture, hostname, Python version, and boot time. |
| get_cpu_infoA | Get CPU information: core counts, current utilization (overall and per-core), clock frequency, and 1/5/15-minute load averages. |
| get_memory_infoA | Get RAM and swap usage in gigabytes and as a percentage. |
| get_disk_infoA | Get disk usage (total/used/free, in GB) for the filesystem containing the given workspace-relative path. Args: path: Path (inside the workspace) whose filesystem to inspect. |
| list_processesA | List running processes on the host (read-only; cannot start, stop, or signal anything). Args: limit: Max number of processes to return (1-200). sort_by: "cpu" or "memory" -- which usage metric to sort by, descending. Returns: Each process's pid, name, username, cpu%, memory%, and status. |
| get_service_statusA | Get the Args: service_name: Service unit name, e.g. "nginx" or "ssh.service". Only letters, digits, '@', '.', '_', and '-' are allowed. |
| fetch_urlA | Fetch a public HTTP/HTTPS URL and return its status, headers, and body. Blocks requests to localhost, loopback, link-local, and private IP ranges to prevent SSRF (unless MCP_ALLOW_PRIVATE_NETWORK=true). Response bodies are capped at MCP_MAX_RESPONSE_SIZE bytes. Args: url: The http:// or https:// URL to fetch. timeout: Optional per-request timeout in seconds (defaults to MCP_HTTP_TIMEOUT). |
| check_connectivityA | Check whether a TCP port on a public host is reachable. Args: host: Hostname or IP to test (private/loopback hosts are blocked). port: TCP port number (1-65535). timeout: Connection timeout in seconds. |
| resolve_dnsB | Resolve a hostname to its IP address(es) and flag whether any are private. Args: hostname: The hostname to resolve. |
| validate_urlA | Validate that a string is a well-formed http/https URL (syntax check only; does not make a network request). Args: url: The URL string to validate. |
| parse_urlB | Break a URL down into scheme, hostname, port, path, query, and fragment. Args: url: The URL to parse. |
| build_urlB | Construct a URL from a base URL, an appended path, and optional query parameters. Args: base_url: Base http/https URL. path: Path segment to append. query: Optional dict of query parameters to encode and attach. |
| git_statusA | Get Args: path: Path to the git repository, relative to the workspace root. |
| git_logB | Get recent commit history for a repository inside the workspace. Args: path: Path to the git repository, relative to the workspace root. limit: Number of commits to return (1-200). |
| git_diffA | Get the current diff for a repository inside the workspace. Args: path: Path to the git repository, relative to the workspace root. staged: If True, show staged (index) changes instead of the working-tree diff. file_path: Optional single file to limit the diff to. |
| git_branchesB | List local branches for a repository inside the workspace, marking which one is currently checked out. Args: path: Path to the git repository, relative to the workspace root. |
| git_current_branchB | Get the name of the currently checked-out branch. Args: path: Path to the git repository, relative to the workspace root. |
| detect_project_typeA | Guess the project type(s) present in a directory by looking for common marker files (pyproject.toml, package.json, Cargo.toml, etc.). Args: path: Directory to inspect, relative to the workspace root. |
| search_text_in_filesA | Recursively regex-search text files under a directory (like a scoped grep), confined to the workspace. Args: path: Directory to search under, relative to the workspace root. pattern: Python regular expression to search each line for. file_glob: Glob to filter which files are searched, e.g. "*.py". max_results: Maximum number of matching lines to return (1-500). |
| count_wordsB | Count words, characters, and lines in a block of text. Args: text: The text to analyze. |
| format_jsonB | Pretty-print (reformat) a JSON string with the given indentation. Args: json_text: Raw JSON text to parse and reformat. indent: Number of spaces per indent level (0-8). |
| validate_jsonB | Check whether a string is valid JSON without modifying it. Args: json_text: The text to validate. |
| csv_to_jsonB | Read a CSV file from the workspace and convert it to a list of row objects keyed by header column. Args: path: Path to the CSV file, relative to the workspace root. |
| csv_get_columnsA | Read just the header row of a CSV file in the workspace. Args: path: Path to the CSV file, relative to the workspace root. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 38 tools
Most tools have clearly distinct purposes, with minimal overlap. Minor confusion possible between file_exists and get_file_info, or between git_branches and git_current_branch, but descriptions clarify their differences.
Tools follow a consistent snake_case pattern overall, but there is a mix of verb_noun (get_memory_info) and noun_verb (file_exists) conventions. Domain-prefixed names like git_* and csv_* are consistent within their groups.
With 38 tools, the server is heavily over the typical 3-15 range. Many tools are very granular and could be combined (e.g., file_exists and get_file_info, or the URL manipulation tools), making the set feel bloated for the purpose.
The surface covers file management, system inspection, network utilities, git read operations, and text processing well. Notable gaps include command execution, package management, and process control, but these may be intentionally excluded for safety.