Skip to main content
Glama
github-community-gitam

MCP Tools Lab

MCP Tools Lab

Seven local developer tools. One Python MCP server.

MCP Tools Lab brings everyday text and data utilities into a single MCP server. Format JSON, inspect CSV, compare text, generate hashes, convert timestamps, and inspect URLs from an MCP client or directly from Python. Every tool runs locally: no API keys, AI models, paid services, or outbound requests. Internet access is needed only to download dependencies during setup.

MCP (Model Context Protocol) lets a compatible application discover and call tools. This project exposes all seven through one local standard-input/output server. You can also call the Python functions directly, without an MCP client or model.

The seven tools

  1. analyze_text — count characters, words, lines, approximate sentences, and the ten most frequent words.

  2. process_json — validate, pretty-print, or minify JSON; optionally sort keys.

  3. inspect_csv — show headers, data-row counts, missing values, and inconsistent row lengths.

  4. hash_text — create SHA-256, SHA-512, or BLAKE2b hashes of UTF-8 text.

  5. compare_text — generate a unified line diff and count added and removed lines.

  6. convert_timestamp — convert Unix seconds and timezone-aware ISO 8601 dates.

  7. inspect_url — split a URL into its components without visiting it.

Related MCP server: lit-forge MCP server

Quick start

Install Python 3.10 or newer and Git. Then:

git clone https://github.com/github-community-gitam/MCP-tools-lab.git
cd MCP-tools-lab
python -m venv .venv

Activate your environment:

# Windows PowerShell
.venv\Scripts\Activate.ps1
# macOS / Linux
source .venv/bin/activate

If Windows blocks activation, use .venv\Scripts\python.exe instead of python in the following commands; changing your execution policy is unnecessary. On systems where the command is python3, use that to create the environment.

python -m pip install .
python examples/try_tools.py

Connect an MCP client

Run the server with python -m mcp_tools_lab or mcp-tools-lab. It waits for MCP messages on standard input; a quiet terminal is normal. Stop a manually started server with Ctrl+C. Usually your MCP client starts it for you.

For clients that accept an mcpServers configuration, use this example and replace the executable with the absolute path to your virtual environment's Python:

{
  "mcpServers": {
    "mcp-tools-lab": {
      "command": "C:/path/to/MCP-tools-lab/.venv/Scripts/python.exe",
      "args": ["-m", "mcp_tools_lab"]
    }
  }
}

On macOS/Linux, the executable is /absolute/path/to/MCP-tools-lab/.venv/bin/python. Client configuration locations vary; use your client's local stdio server settings. The project uses the official Python MCP SDK's v1 API and bounds its dependency below v2 to avoid incompatible API changes.

Try tools with ordinary Python

from mcp_tools_lab.tools.json_tool import process_json
from mcp_tools_lab.tools.timestamps import convert_timestamp

print(process_json('{"b":2,"a":1}', sort_keys=True))
print(convert_timestamp("0"))
# {'unix_seconds': 0.0, 'iso_utc': '1970-01-01T00:00:00Z'}

See examples/try_tools.py for all seven functions and docs/tool-guide.md for inputs, results, and edge cases.

Project layout

src/mcp_tools_lab/
    server.py           # Registers the seven tools
    tools/              # One small Python module per tool
tests/                  # Tool tests and a real MCP round-trip test
examples/try_tools.py   # Run all tools without a model or MCP client
docs/tool-guide.md      # Input/output behavior

All application, example, and test code is Python. TOML and Markdown provide packaging configuration and documentation; no JavaScript or frontend is required. Tools accept supplied strings, do not read arbitrary files, and process inputs in memory. The server is designed for local use with small text inputs.

License

This project is released under the MIT License.

Available Tools

7 tools
analyze_textA

Count Unicode words, characters, lines, and approximate sentences.

Words are letter/digit sequences (apostrophes within words are kept). Sentences are nonempty pieces separated by '.', '!', or '?'. This is a simple heuristic, not linguistic analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose behavioral traits: exact word tokenization rules (letter/digit sequences, apostrophes preserved), sentence-splitting delimiters, and the heuristic/approximate nature of the counts. It stops short of describing the result structure or edge cases like empty input.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, followed by two short definitions and a one-line caveat. Every sentence adds information about how counts are computed, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-input, annotation-free computation tool with no output schema, the description covers what is counted and how tokens are defined, which is nearly enough to call it correctly. It could still state the shape of the returned counts or behavior on empty/whitespace text.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter, named 'text', which is self-explanatory, so the low schema coverage is not costly. The tokenization definitions indirectly clarify how the input string will be interpreted, but no additional parameter semantics are needed or given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (count) applied to concrete resources (Unicode words, characters, lines, sentences), so the purpose is unambiguous. It does not explicitly contrast itself with siblings like hash_text or compare_text, but the resource distinction is self-evident from the wording.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use statement or routing to a sibling. The closing line 'This is a simple heuristic, not linguistic analysis' functions as a soft when-not warning against expecting real NLP, which is useful but minimal guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_textB

Return a unified diff and counts; ignore line-ending style and final newline.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterYes
beforeYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose real behavioral semantics: line-ending style and final newline are ignored during comparison. However, it omits what the 'counts' contain, whether output is truncated for large inputs, and any auth or performance traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the core output statement front-loaded and the normalization caveat second. No filler, though it is terse to the point of omitting needed detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No annotations and no output schema, so the description must fully describe both behavior and return shape. It partially does ('unified diff and counts') but leaves the count format, output structure, and edge-case handling unspecified for a two-required-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description never mentions the 'before' and 'after' parameters, so it adds no meaning beyond the schema. The parameter names are largely self-explanatory, which prevents a score of 1, but the description does not compensate for the documentation gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and output ('Return a unified diff and counts'), which clearly identifies a text-comparison operation distinct from the analysis/inspection siblings. It stops short of explicitly ruling out sibling tools, but no sibling overlaps with diffing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies when to use it (comparing two text blobs), but there is no explicit guidance about alternatives, prerequisites, size limits, or when another sibling like analyze_text would be more appropriate. Usage is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_timestampA

Convert Unix seconds to UTC ISO 8601, or an offset-aware ISO date to seconds.

ISO input must include a time and timezone, such as 2026-01-01T12:00:00+05:30.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
directionNoto_iso

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden and does disclose the core conversion behavior plus a validation constraint for ISO input. It does not describe error handling or invalid-input behavior, but for a simple deterministic converter it is still reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The primary conversion behavior is front-loaded, and the input format constraint follows as a useful clarification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter converter with no output schema and no annotations, the description covers both input directions and the required ISO format. It could add default-direction or error behavior detail, but the essential information needed to call the tool correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needs to compensate, and it explains the two value formats and the two conversion directions. It does not explicitly name the direction parameter or its default, but the enum values are self-explanatory and the description maps directly to them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: converting timestamps between Unix seconds and ISO 8601. The description also distinguishes the two conversion directions clearly, so an agent can understand the tool's core purpose immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear input-format condition: ISO input must include a time and timezone, with an example. It does not explicitly state when not to use the tool or name alternatives, but the sibling tools are unrelated, so this is clear enough context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hash_textA

Hash UTF-8 text using SHA-256, SHA-512, or BLAKE2b; return lowercase hex.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
algorithmNosha256

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses input encoding (UTF-8) and output format (lowercase hex), which are genuine behavioral facts, but says nothing about determinism, empty-string handling, or error behavior for unsupported inputs. For a pure, side-effect-free function the remaining risk is low.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence that front-loads the action and resource and ends with the output format. No filler, nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations exist, so the description had to state the return shape, which it does ('lowercase hex'). For a two-parameter, side-effect-free utility this is nearly complete; the only gap is explicit handling of the optional algorithm default, which the schema already covers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It enumerates the three algorithm values (matching the enum) and clarifies the input is UTF-8 text, but does not explain the 'text' parameter's expected content or reflect the sha256 default. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (hash), the exact resource (UTF-8 text), the supported algorithms, and the output encoding. Among siblings like analyze_text, compare_text, and process_json, it is immediately clear this is the deterministic hashing utility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the description — you use it when you need a hash digest of text — but there is no explicit when-to-use/when-not, no mention of alternatives for non-hash needs, and no prerequisites. Adequate but leaves routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_csvA

Report rows, empty cells, and ragged records (record 1 is the header).

Missing counts include absent trailing cells and whitespace-only cells. Entirely blank records are skipped by Python's CSV reader.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden and does disclose non-obvious traits: missing counts include absent trailing cells and whitespace-only cells, entirely blank records are skipped by Python's CSV reader, and record 1 is treated as the header. It does not describe the exact output structure or error behavior, but for an inspection tool the disclosed edge-case semantics are valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded: the first sentence states the report contents and header assumption, and the following sentences only add necessary parsing edge cases. Every sentence earns its place with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter inspection tool, the description covers important CSV parsing semantics and edge cases. However, with no output schema and 0% parameter description coverage, it does not fully document the parameter meaning or the shape of the returned counts, leaving some inference to the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one required parameter with 0% schema description coverage. The description implies the text parameter is CSV content and explains how its records are interpreted, but it never names or explicitly describes the parameter or its expected format. Some semantic help is added, but the low schema coverage is not fully compensated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and scope: report rows, empty cells, and ragged records for CSV text, with an explicit note that record 1 is the header. It is clearly distinguishable from siblings like analyze_text or hash_text, though it does not explicitly name alternatives. A clear purpose, but not the strongest possible sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use guidance, prerequisites, or alternatives. It implies the tool is for inspecting CSV text, but an agent must infer that from the tool name and the parsing notes rather than being told when this tool should be selected over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_urlC

Inspect an absolute URL with a hostname; preserve repeated/blank query values.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose one genuine trait — repeated and blank query values are preserved rather than normalized — but says nothing about error handling for malformed URLs, whether the operation is read-only, or what the returned inspection contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the key input constraint front-loaded and no filler. It is efficient, though the terseness borders on under-specification rather than deliberate concision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter utility with no output schema and no annotations, an agent still lacks the return shape, error behavior, and read/write character. The one behavioral note about query values does not fill those gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema gives only a bare string type, so the description must compensate. It adds a real constraint ('absolute URL with a hostname') beyond the schema, but does not clarify format expectations such as scheme requirements, encoding, or whether invalid input is rejected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb+resource pair ('Inspect ... URL') is present and the resource distinguishes it from siblings like inspect_csv and analyze_text. However, 'inspect' is ambiguous about what the tool actually does — parse, validate, normalize, or decompose — and the description never says what the output represents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this tool, when not to, or which sibling handles related tasks. The only guidance is an implicit input constraint ('absolute URL with a hostname'), which is a precondition rather than a usage rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

process_jsonC

Validate or format JSON using Python numbers; pretty output uses two spaces.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
actionNoformat
sort_keysNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden. It discloses one output trait (pretty output uses two spaces) but says nothing about failure behavior on malformed JSON, whether validation is non-mutating, or what the response looks like for each action. For a validator this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single sentence with the primary purpose front-loaded, which is good. The phrase 'using Python numbers' is cryptic and reads as an implementation detail whose significance to the caller is unclear, so the sentence is short but not fully earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no annotations, and zero parameter descriptions, the definition should explain the actions and the sort_keys flag plus error behavior. It covers only part of the action set and no parameter semantics, leaving an agent unable to invoke the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and largely does not. It hints at the validate/format actions and the two-space indent, but never mentions minify, never explains sort_keys, and never clarifies the default action behavior beyond the schema's own default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (validate/format) and resource (JSON), which is enough to separate it from text-oriented siblings like analyze_text and compare_text. However it omits the third supported action (minify) that the schema enum exposes, so the stated purpose is narrower than the tool actually is.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no indication of when this is preferable to sibling tools, and no note on whether invalid input raises an error or returns a diagnostic. The agent must infer all routing decisions on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedanalyze_text
    • First observedcompare_text
    • First observedconvert_timestamp
    • First observedhash_text
    • First observedinspect_csv
    • First observedinspect_url
    • First observedprocess_json

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: text analysis, JSON processing, CSV inspection, hashing, text comparison, URL inspection, and timestamp conversion. There is no overlap in functionality, and the descriptions make the boundaries explicit.

Naming Consistency4/5

Most tool names follow a verb_noun pattern (analyze_text, process_json, inspect_csv, hash_text, compare_text, inspect_url, convert_timestamp). The consistency is strong, though the verbs vary (analyze, process, inspect, hash, compare, convert) which is appropriate for the diverse actions but slightly reduces uniformity.

Tool Count5/5

With 7 tools, the server is well-scoped for a utility toolkit. Each tool addresses a specific common task without redundancy, making the set feel complete and purposeful.

Completeness4/5

The tools cover a range of common text and data operations (text analysis, JSON, CSV, hashing, diffing, URL parsing, timestamp conversion). However, some potentially related operations like base64 encoding or other hash algorithms are missing, though these are not critical for the stated scope.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    B
    maintenance
    Swiss-army-knife utility MCP server for AI agents. 18 tools for JSON validation/formatting, base64 encode/decode, hash generation, UUID generation, URL parsing, regex testing, markdown↔HTML conversion, text stats, slug generation, datetime conversion, cron parsing, text diffing, CSV↔JSON conversion, and JWT decoding. Zero API Key required
    18
    5
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI clients to use developer utilities like JSON formatting, JWT decoding, UUID generation, and more via MCP.
    12
    110 npm
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server providing 35 utility tools for AI agents including text analysis, encoding, hashing, password generation, JSON/CSV/XML parsing, regex, color, date, finance, URL metadata, SEO tags, DNS lookup, SSL inspection, and JWT decoding. Free, zero-dependency, and works with any MCP client.
    35
    47 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to perform common utility tasks through a streamable HTTP MCP endpoint, including JSON inspection, regex testing, cron parsing, hashing, base64 encoding/decoding, URL analysis, color conversion, text diffing, CSV parsing, JWT decode/verification, Markdown-to-HTML rendering, and UUID/token generation without API keys.
    MIT