Skip to main content
Glama
metehan05-eng

AI Company Manager MCP Server

AI Company Manager MCP Server

License: MIT Python MCP Platforms Transport

An AI-powered MCP (Model Context Protocol) server. It exposes company management tools to MCP clients such as Cursor, Claude Desktop and OpenCode: company profile, financial records, employee directory and company notes, all stored in plain local files. No data leaves your machine, no API key is required, and it is free to use.

Installs with a single command and runs on Windows, Linux and macOS.


Table of Contents


Related MCP server: Headquarter

What It Does

When you ask an MCP client "what is our cash flow this month?", "add a new employee" or "save the notes from yesterday's meeting", the server:

  1. Exposes the request as a validated MCP tool.

  2. Reads or atomically updates files inside the company_data/ directory.

  3. Returns the result to the client as text.

The assistant therefore works on your company data without unauthorized access and without any cloud service. Because every change is written to plain text files, you can back up, review or edit the data at any time with your favorite tools.

Features

  • Zero to running company: profile, financial file, founder employee record and standard department template

  • Financial tracking: income/expense records, automatic cash flow summary, current balance

  • Employee management: validated employee records with automatic EMP-0001 style IDs

  • Company notes: create or update policy, meeting, strategy or vision notes by title

  • Multiple file formats: read/write TXT, MD, JSON, CSV and XLSX; read PDF and DOCX

  • Atomic file writes and strict path boundaries (symlinks and .. are rejected)

  • Formula injection protection: leading =, +, - and @ characters are neutralized in CSV and XLSX cells

  • No credentials required: never talks to an external service

  • One-command install: Windows, Linux and macOS

  • MCP stdio transport (JSON-RPC 2.0)

Requirements

  • Python 3.10 or newer

  • Internet access (only to download dependencies during the first install)

  • If uv is installed the setup is much faster; otherwise the standard venv + pip path is used. You do not need to install anything else yourself.

Dependencies are pinned in requirements.txt:

mcp[cli]>=1.30.0,<2.0.0
pydantic>=2.11.0,<3.0.0
pandas>=2.2.0,<3.0.0
openpyxl>=3.1.5,<4.0.0
pypdf>=3.0.0
python-docx>=0.8.11

Why <2? The project uses the FastMCP API, so the MCP Python SDK is pinned to the maintained >=1.30,<2 range.

Quick Install

Clone the repository, enter the folder and run a single command.

Linux / macOS

git clone https://github.com/metehan05-eng/AI-Company-Manager-MCP-Server.git
cd AI-Company-Manager-MCP-Server
python3 install.py

Windows (PowerShell or Command Prompt)

git clone https://github.com/metehan05-eng/AI-Company-Manager-MCP-Server.git
cd AI-Company-Manager-MCP-Server
python install.py

After the install, toggle the MCP server once in Cursor (off/on). The first run downloads packages and takes a few seconds; every later start is instant.

What the Installer Does

install.py behaves identically on all three platforms and, in order:

  1. Creates the environment. Builds a .venv inside the project and installs everything in requirements.txt. Uses uv when available (very fast), otherwise falls back to venv + pip.

  2. Writes the MCP configuration. Adds the ai-company-manager server to <project>/.cursor/mcp.json and ~/.cursor/mcp.json. If a Claude Desktop configuration exists, it is added there too. Existing servers and settings are preserved; invalid files are backed up as .bak.

  3. Verifies the installation. Actually starts the server, sends initialize and tools/list requests and prints how many tools were found, so a "cannot connect" failure shows up during setup instead of later.

Typical output (installer messages are in Turkish):

AI Company Manager MCP kurulumu (linux)
uv bulundu; hizli kurulum kullanilacak.
  sanal ortam olusturuluyor
  bagimliliklar kuruluyor
MCP yapilandirmasi yaziliyor...
  guncellendi: .../.cursor/mcp.json
  guncellendi: ~/.cursor/mcp.json
Sunucu dogrulaniyor...
  sunucu: AI Company Manager 1.30.0
  arac sayisi: 7
Bitti (13.5 saniye).

Installer Options

Option

What it does

--force

Deletes and recreates the virtual environment.

--skip-deps

Only writes the MCP configuration (no dependency install).

--no-global

Leaves ~/.cursor and the Claude Desktop configuration untouched.

--skip-verify

Skips the live server verification after install.

Examples:

python3 install.py --force        # rebuild a broken virtual environment
python3 install.py --no-global    # only write the project configuration

Manual Install

If you prefer not to use the installer script:

cd AI-Company-Manager-MCP-Server
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt

Activate the environment on Windows PowerShell:

.\.venv\Scripts\Activate.ps1

To try it interactively with MCP Inspector:

mcp dev src/server.py

mcp dev requires Node.js and npx. The server speaks over stdio and prints nothing to the terminal while it waits for an MCP client.

MCP Client Setup

python install.py writes the Cursor and Claude Desktop configuration for you. The files below are what you would edit manually.

Cursor

Cursor reads .cursor/mcp.json from the folder you open. ${workspaceFolder} resolves to that folder, so the same file works unchanged on every machine.

Content written on Linux and macOS:

{
  "mcpServers": {
    "ai-company-manager": {
      "command": "bash",
      "args": ["${workspaceFolder}/run_mcp.sh"],
      "env": {
        "COMPANY_DATA_DIR": "${workspaceFolder}/company_data",
        "COMPANY_MAX_FILE_MB": "10"
      }
    }
  }
}

On Windows, command is cmd and args is ["/c", "${workspaceFolder}\\run_mcp.cmd"].

To use the server in every project without opening this folder, use the absolute-path entry in ~/.cursor/mcp.json; the installer updates both files.

The launcher scripts (run_mcp.sh, run_mcp.cmd) create the virtual environment if it is missing and write all installation output to stderr; stdout is reserved for the MCP protocol only.

Claude Desktop

Claude Desktop usually starts MCP commands from its own working directory, which is why the installer writes an absolute-path entry into the Claude Desktop configuration. To do it manually:

macOS/Linux:

{
  "mcpServers": {
    "ai-company-manager": {
      "command": "/ABSOLUT/PATH/AI-Company-Manager-MCP-Server/.venv/bin/python",
      "args": ["/ABSOLUT/PATH/AI-Company-Manager-MCP-Server/src/server.py"],
      "env": {
        "COMPANY_DATA_DIR": "/ABSOLUT/PATH/AI-Company-Manager-MCP-Server/company_data",
        "COMPANY_MAX_FILE_MB": "10"
      }
    }
  }
}

On Windows, command must be .venv\\Scripts\\python.exe. Restart Claude Desktop after changing the configuration.

OpenCode

Create an opencode.json in the project root:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-company-manager": {
      "type": "local",
      "command": [
        "/ABSOLUT/PATH/AI-Company-Manager-MCP-Server/.venv/bin/python",
        "/ABSOLUT/PATH/AI-Company-Manager-MCP-Server/src/server.py"
      ],
      "enabled": true,
      "environment": {
        "COMPANY_DATA_DIR": "/ABSOLUT/PATH/AI-Company-Manager-MCP-Server/company_data",
        "COMPANY_MAX_FILE_MB": "10"
      }
    }
  }
}

OpenCode only reads its settings at startup, so restart it after editing.

MCP Tools

Tool

Purpose

Required arguments

list_company_files

Lists every file in the data directory with type, size and modification time.

—

get_company_overview

Returns a summary of profile, budget, income, expenses, net cash flow and current balance.

—

read_company_file

Converts a supported file into text the AI can analyze.

filename

create_new_company

Creates the profile, financial file and founder row.

company_name, sector, initial_budget

add_financial_record

Appends an income or expense transaction to financials.json.

type, category, amount, description

add_employee

Appends a validated employee record to employees.csv.

name, role, department, salary

update_company_notes

Creates or updates a policy, meeting, strategy or vision note.

note_title, content

inspect_company_data

Reports whether each core file matches the expected schema, and why not.

—

migrate_company_data

Converts an existing employees.csv to the current column schema.

— (apply defaults to false)

plan_company_data_migration

Proposes a field mapping for an existing company_profile.json and financials.json. Read-only.

—

apply_company_data_migration

Writes the mapping you confirmed. Answers every open item first.

— (apply defaults to false)

All arguments are validated with Pydantic: empty text, a negative budget, a zero-amount financial record or a description longer than 2,000 characters is rejected.

Example Client Calls

create_new_company(company_name="Atlas Software", sector="SaaS", initial_budget=2500000)
add_financial_record(type="income", category="services", amount=125000, description="Monthly enterprise subscription")
add_employee(name="Deniz Kaya", role="Senior Developer", department="Engineering", salary=95000)
read_company_file(filename="employees.csv")

Natural language examples:

  • "Summarize this month's cash flow."

  • "Add a 45,000 expense under the infrastructure category."

  • "Create a note titled Strategy: we are targeting a European launch in 2026."

  • "Read the management report and list the risks."

Data Layout

The repository ships no real company data: the company_data/ folder arrives empty and is ignored by .gitignore. The core files are created by the create_new_company tool. If a company with financial records or an employees.csv is detected, the tool refuses to create a new company so that data cannot be lost. Back up the core files before starting another company.

File

Content

company_data/company_profile.json

Company name, sector, founding year, departments, vision, mission, metrics

company_data/financials.json

Budget, income/expense categories, transactions, cash flow summary

company_data/employees.csv

Founder and employee records (EMP-0001, EMP-0002, ...)

company_data/company_notes.json

Company notes (created on the first update_company_notes call)

company_data/*.pdf, *.docx

Your own documents (read-only)

You can drop your own TXT, MD, JSON, CSV, XLSX, PDF or DOCX documents into company_data/; read_company_file reads them.

Using an Existing employees.csv

If you already have an employees.csv from another system, the tools understand common column names instead of demanding the exact current schema.

Current column

Also accepted as

employee_id

id, employee_code, code, no

name

full_name, fullname, ad_soyad, employee_name, personel_adi

role

title, position, gorev

department

dept, unite, team, bolum

salary

monthly_salary, monthly_salary_usd, salary_usd, maas, ucret

start_date

hire_date, hired_at, ise_giris, start

status

employment_status, state, durum

Only name, role, department and salary are strictly required. Missing employee_id, start_date and status are filled in automatically, dates accept YYYY-MM-DD, DD.MM.YYYY and DD/MM/YYYY, and any status other than a recognized "inactive" value is treated as active. Columns the tools do not recognize, such as performance_score, are preserved on read and on every subsequent write.

Use inspect_company_data to see which files match the schema and what is blocking the others. Use migrate_company_data to permanently rewrite employees.csv in the canonical layout; it is a dry run by default and writes a timestamped backup before applying.

{"tool": "inspect_company_data", "arguments": {}}
{"tool": "migrate_company_data", "arguments": {}}
{"tool": "migrate_company_data", "arguments": {"apply": true}}

Mapping an Existing Profile and Ledger

company_profile.json and financials.json are not rewritten automatically. Real-world variants carry custom fields such as ARR, fiscal_year or runway metrics, and rewriting them would destroy data. inspect_company_data reports them as incompatible; plan_company_data_migration goes one step further and produces a read-only proposal that apply_company_data_migration can then write once you have answered its questions.

Nothing is ever written. The report splits every source field into one of these buckets:

Bucket

Meaning

already_valid

The key and value already satisfy the canonical model and are reused unchanged.

mappable

A rule can convert it. confidence is auto or needs_confirmation.

skipped_conflicts

Two source fields target the same canonical field; the first one wins.

incompatible_values

The value cannot be used as it is, with the reason.

no_target

No canonical field exists. Known risky fields such as pending_invoices_receivable come with an explanation.

missing_required

A required canonical field that no source field provides.

A proposal is needs_confirmation whenever the rule has to assume or drop something, for example founded_year: 2023 becoming established_date: 2023-01-01, or status: "Active / Series-A Funded" being narrowed to active. Those become explicit questions. Cross-file problems are reported separately, such as a ledger with no company_name or a profile that would silently default to TRY while the ledger is USD.

proposed_document is only included when no question is open, so a ready-to-use document can never be copied into place unread. The server never applies an exchange rate.

{"tool": "plan_company_data_migration", "arguments": {}}

Confirming the Mapping

apply_company_data_migration is the write step for the same mapping. It replans the files itself, so it always applies to the current content, and it refuses to write until every open item has an answer.

Each question carries a key of the form <file>:<field>, for example company_profile.json:mission. Pass them back in answers:

  • true accepts the suggested value.

  • Any other value is used as the final value, so a wrong assumption can be corrected ("company_profile.json:mission": "Ship faster").

  • A key with no suggested value rejects true and asks for an explicit value, so a missing field can never be confirmed by accident.

  • Unknown keys and unanswered keys are both errors, and nothing is written when they occur.

apply defaults to false, so the first call is a dry run that shows the exact documents and the list of files that would change. Re-run with apply: true to write. Only files that actually change are touched, and each one is copied to <name>.backup-<timestamp>.json first. A file that is already canonical is left alone, so the call is safe to repeat.

{"tool": "apply_company_data_migration", "arguments": {"answers": {"company_profile.json:mission": true}}}
{"tool": "apply_company_data_migration", "arguments": {"answers": {"company_profile.json:mission": true}, "apply": true}}

PDF and DOCX Reading Behavior

Case

Behavior

PDF with text

Every page is extracted under a --- Sayfa N --- header.

PDF without text

A warning is returned for the page, noting the file may be a scanned image and that OCR is required.

Encrypted PDF

An empty password is attempted; if that fails a clear error is returned.

Corrupt PDF/DOCX

A CompanyFileError with the file name and technical detail is returned.

DOCX

All paragraphs and all tables are extracted (tables under a --- Tablo N --- header, cells joined with |).

Writing PDF/DOCX

Rejected: these formats are read-only.

Missing dependency

A clear error is returned including the install command.

Configuration

Variable

Default

Description

COMPANY_DATA_DIR

company_data inside the project

Absolute path, or relative to the project root.

COMPANY_MAX_FILE_MB

10

File size limit for reads and writes (minimum 1).

.env.example is a template only; provide environment variables through the client env field or through the operating system.

Security and Resilience

  • Absolute paths, .. traversal and symlinks are rejected.

  • Every read and write stays inside the data directory.

  • Files are updated atomically with a temporary file in the same directory plus os.replace.

  • Financial and employee changes run under a single wizard lock.

  • JSON structure, numeric fields, dates and table columns are validated.

  • Formula injection is neutralized in CSV and XLSX cells with a prefix character.

  • The installer merges MCP configurations instead of overwriting them.

  • Data is plain text: no API keys, no authentication. Take regular backups.

Project Structure

AI-Company-Manager-MCP-Server/
├── install.py               # One-command installer (Windows/Linux/macOS)
├── run_mcp.sh               # Linux/macOS launcher (bootstraps the virtual environment)
├── run_mcp.cmd              # Windows launcher
├── requirements.txt         # Pinned dependencies
├── mcp.json                 # Example configuration in Cursor format
├── LICENSE                  # MIT
├── .env.example             # Environment variable template
├── .cursor/mcp.json         # Cursor project configuration
├── company_data/            # Company data lives here (and only here)
└── src/
    ├── server.py            # MCP tool definitions (FastMCP)
    ├── file_handler.py      # File I/O, path boundaries, PDF/DOCX
    └── company_wizard.py    # Business rules, company setup, notes

Development

Set up an editable install with the development extras:

git clone https://github.com/metehan05-eng/AI-Company-Manager-MCP-Server.git
cd AI-Company-Manager-MCP-Server

python3 -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
python -m pip install -e ".[dev]"

Code style, type checks, and tests:

ruff format --check --no-cache src tests install.py
ruff check --no-cache src tests install.py
mypy --python-version 3.10 src install.py
pytest

With coverage:

pytest --cov=src --cov-report=term-missing

Tests never touch your real company_data directory: every test runs in its own temporary directory, and tests/test_repository.py fails the build if real company data or secrets are ever committed.

Verify a change against a live server without modifying anything:

python3 install.py --check          # dependency check plus tools/list handshake

To actually install, run python3 install.py. This writes the configuration, starts the server and validates the tool list with a tools/list call. Use python3 install.py --skip-deps to only rewrite the configuration, and mcp dev src/server.py for interactive testing with MCP Inspector.

Continuous integration

.github/workflows/ci.yml runs on every push and pull request:

  • ruff lint and format check, mypy type check

  • pytest with coverage on Ubuntu, Windows, and macOS across Python 3.10-3.13

  • Installer smoke test (install.py --check) on all three operating systems

Roadmap

  • Automated test suite (pytest) and CI workflow

  • Read existing employees.csv with common column names; schema inspection and migration

  • Read-only mapping proposals for existing company_profile.json and financials.json

  • Apply a confirmed company_profile.json / financials.json mapping with a backup

  • Period breakdown table for budget and cash flow

  • Update and delete operations for financial records and employees

  • Character budget for read_company_file output and PDF page ranges

  • Excel/PPTX reading support

  • Support for multiple company data directories

  • Backup/archive tool

Contributing

Contributions are welcome. See CONTRIBUTING.md for the full workflow and house rules, CHANGELOG.md for the release history, and SECURITY.md for reporting a vulnerability privately.

In short: fork, branch, make the change, then make sure these four commands pass before opening a pull request.

ruff format --check --no-cache src tests install.py && ruff check --no-cache src tests install.py
mypy --python-version 3.10 src install.py && pytest

When you add a new MCP tool, remember to update its docstring in src/server.py; that text is sent to clients as the tool description.

License

Released under the MIT License. See LICENSE for the full text.

Copyright (c) 2026 AI Company Manager Contributors

Available Tools

11 tools
add_employeeC

Append a validated employee record to employees.csv.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
roleYes
salaryYes
departmentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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, and it discloses very little: it implies a file write but says nothing about permissions, whether appends are atomic, what happens to the file on validation failure, or whether the write is reversible. "Validated" is the only behavioral hint and it is not explained.

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 front-loaded sentence with no filler or redundancy. It is efficient, though arguably under-specified rather than truly concise given the 4 undocumented required parameters.

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?

An output schema exists, so return values need no explanation, but for a required-parameter mutation tool with no annotations and no parameter documentation, the description leaves too much unstated: validation rules, overwrite/duplicate behavior, and permission requirements.

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% across 4 parameters, and the description names none of them (name, role, department, salary) nor adds format or constraint meaning beyond what the field titles already imply. It does not compensate for the coverage 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?

Specific verb ("append") plus resource ("a validated employee record") and the concrete storage target (employees.csv). It clearly states what the tool does, though it does not differentiate itself from the company-data siblings, which are mostly unrelated to employee records.

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 statement of when to use this tool versus alternatives, no prerequisites, and no indication of what happens on duplicate or invalid records. The word "validated" hints that validation occurs, but the conditions and failure behavior are left entirely to inference.

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

add_financial_recordC

Append an income or expense transaction to financials.json.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYes
amountYes
categoryYes
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/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 does disclose two meaningful behavioral facts — that the operation is additive ('append', not overwrite) and that state is persisted to financials.json — but says nothing about permissions, validation failures, or duplicate handling.

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 tightly written sentence with the verb and target front-loaded and no filler. It is efficient, though almost too terse to carry the needed guidance.

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?

An output schema exists so return values need not be explained, but for an unannotated mutation tool with four undocumented required parameters the description is too thin. Persistence target is given but usage context, prerequisites, and parameter meaning are all missing.

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% across four required parameters. The description only echoes the type enum ('income or expense') and adds no meaning for category format, amount constraints, or description content, so it fails to compensate for the 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?

States a specific verb (append) plus resource (income or expense transaction) and the target artifact (financials.json). An agent can tell it is a financial-entry writer, though it does not explicitly differentiate itself from the sibling mutation tools like update_company_notes or migrate_company_data.

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 indication of when to use this tool versus alternatives, no prerequisites, and no exclusions. With ten sibling tools in the same company-data family, the absence of routing guidance leaves the agent to infer context entirely.

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

apply_company_data_migrationA

Write a confirmed company_profile.json and financials.json mapping.

Pass one answer per open item reported by plan_company_data_migration, keyed by its key (for example "company_profile.json:mission"). An answer of true accepts the proposed value; any other answer is used as the final value. Runs as a dry run unless apply=True, and backs up each changed file first.

ParametersJSON Schema
NameRequiredDescriptionDefault
applyNo
answersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/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 well: it discloses that the call runs as a dry run unless apply=True and that each changed file is backed up first. It omits permission requirements, reversibility, and how unmapped/untouched fields are treated, so it falls short of full behavioral coverage.

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?

Three tight sentences, front-loaded with the write action followed by input contract and then safety behavior. No filler and no repetition of schema fields.

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?

An output schema exists, so return values need not be explained, and the description covers the write action, input contract, dry-run default, and backup behavior. Remaining gaps are peripheral: which files/workspace are targeted and prerequisites beyond having run the plan tool.

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 must compensate, and it does: it defines the keying convention for 'answers' (keyed by the plan item's key, e.g. 'company_profile.json:mission'), the sentinel semantics of true, and the effect of 'apply' (dry run vs. write). It does not describe the accepted value types beyond the true-sentinel rule.

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+resource ('Write a confirmed company_profile.json and financials.json mapping') and positions itself relative to the sibling that produces its inputs (plan_company_data_migration). An agent can distinguish this from plan_company_data_migration and migrate_company_data without opening any schema.

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?

Gives clear workflow context: answers must correspond to open items reported by plan_company_data_migration, keyed by that item's key. It does not explicitly say 'call plan first' or exclude alternatives like migrate_company_data, so routing 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.

create_new_companyB

Create a new company profile, financial ledger, and founder employee record.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectorYes
company_nameYes
initial_budgetYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/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 behavioral burden, and it does disclose a non-obvious side effect: a single call creates three entities (profile, ledger, founder employee). That is genuinely useful. However, it says nothing about failure modes (e.g., duplicate company name), permission requirements, or reversibility, which are significant gaps for an unannotated mutation tool.

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 front-loaded sentence with zero filler; the verb and the three created artifacts are stated up front. Nothing is padded and nothing needs trimming.

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?

An output schema exists, so return values need not be explained, which the description correctly omits. But for an unannotated, three-parameter mutation that provisions multiple entities, the definition omits prerequisite conditions and parameter meaning, leaving real gaps for the agent.

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?

All three parameters have 0% schema description coverage, so the description must compensate, and it does not. It never clarifies what initial_budget represents (currency, units, minimum 0 semantics) or what sector expects beyond a free string. Parameter meaning is left entirely to inference.

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 (Create) and enumerates exactly what gets created: a company profile, a financial ledger, and a founder employee record. This implicitly distinguishes it from siblings like add_financial_record and add_employee, which add single entities rather than bootstrapping a whole company. It stops short of naming a sibling explicitly, but the scope is unambiguous.

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 prerequisites, and no mention of alternatives such as add_employee or add_financial_record, which overlap with the founder record and ledger this tool creates. An agent can infer 'use this to start a company,' but the description never states when this is preferable to the granular sibling tools.

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

get_company_overviewA

Return a current company profile and financial summary from local files.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/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 behavioral burden. 'Return' implies a read-only operation and 'from local files' usefully discloses the data source, but it says nothing about freshness guarantees beyond the word 'current', permissions, or behavior when no local data exists.

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 front-loaded sentence with no filler; the action, the payload, and the source are all stated without waste.

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?

The tool is parameterless and has an output schema, so return values need not be described. The remaining gap is sibling differentiation against inspect_company_data and read_company_file, which is the main thing an agent would want clarified.

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?

The tool takes zero parameters, so there is nothing for the description to compensate for. The baseline of 4 applies since parameter semantics are trivially complete.

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 ('Return') and concrete resources ('company profile and financial summary'), plus a data-source scope ('from local files'). However, it does nothing to distinguish itself from siblings like inspect_company_data or read_company_file, which an agent must disambiguate among.

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 or when-not-to-use guidance and no named alternative. The agent must infer from the phrase 'company profile and financial summary' that this is the summary-level tool rather than the file-level siblings, which is a real inference burden given the crowded sibling set.

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

inspect_company_dataB

Check whether the files in company_data match the schema the tools expect.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/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 does not state whether this is read-only, whether it reports or repairs mismatches, or whether it has side effects on company_data — all material for a validation tool whose siblings include mutating operations.

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 the scope. Nothing extraneous.

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?

An output schema exists, so return values need not be described. For a zero-argument read tool, the description answers what it does but leaves the read-only nature and the circumstances that warrant running it unstated, which matters given the migration siblings.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the schema already establishes. Baseline 4 applies.

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 concrete verb (check) and the resource (the files in company_data) plus the specific criterion (match the schema the tools expect). This is clear, though it does not explicitly differentiate itself from related siblings like migrate_company_data or plan_company_data_migration.

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 guidance on when to run this versus the migration-planning siblings, and no explicit prerequisites (e.g., run before planning a migration, or after creating a company). The diagnostic intent is only implied by the word 'check'.

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

list_company_filesA

List all files in company_data with type, byte size, and modification time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/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 burden. It conveys that this is a non-destructive listing and names the returned attributes, but says nothing about pagination, directory recursion, permissions, or behavior on large datasets.

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, front-loaded sentence with no filler; the key scope ('all files in company_data') comes first and each clause adds information.

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 zero-parameter listing tool with an output schema that already defines the return shape, the description is nearly sufficient. It could still note scope limits (e.g., recursion or result caps), which keeps it short of 5.

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?

The tool takes zero parameters, so the schema baseline is 4. The description adds nothing about parameters, but none exist to document.

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 (List) and resource (files in company_data), plus the returned attributes. It is clearly distinguishable from read_company_file (retrieve content) and inspect_company_data (analysis), though it does not name a sibling explicitly.

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 scope 'all files in company_data' implies usage for file inventory, but there is no explicit when-to-use or when-not-to-use guidance, and no routing to alternatives like read_company_file or inspect_company_data.

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

migrate_company_dataA

Convert an existing employees.csv to the current column schema.

Runs as a dry run by default. With apply=True it renames the known columns, fills in start_date/status defaults, keeps unknown columns such as performance_score, and writes a timestamped backup first.

ParametersJSON Schema
NameRequiredDescriptionDefault
applyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and does so well: it discloses the safe-by-default dry run, the exact mutation performed under apply=True (renames known columns, fills start_date/status defaults), that unknown columns like performance_score are preserved, and that a timestamped backup is written first. This is precisely the non-destructive/reversibility context an agent needs before a data migration.

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?

Four short sentences, front-loaded with the purpose, then the safety default, then the concrete effects of apply=True. Every sentence adds information an agent needs; 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?

An output schema exists, so return values need not be described, and the input side is fully covered. The remaining gap is relational: nothing says how this tool relates to plan_company_data_migration/apply_company_data_migration or what preconditions (file existence, schema version) must hold.

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

Parameters5/5

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

Schema description coverage is 0% and the sole parameter's schema entry is just a title and default, so the description must compensate — and it does, explaining both values of apply (false = dry run, true = perform the rename/fill/write). Nothing about the parameter's semantics is left ambiguous.

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 and resource: 'Convert an existing employees.csv to the current column schema.' That is concrete enough to distinguish it from the CRUD siblings, but it never addresses the two very similarly named siblings plan_company_data_migration and apply_company_data_migration, so an agent still has to guess at the boundary between them.

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?

It clearly explains the operating mode: 'Runs as a dry run by default. With apply=True it renames...' which tells the agent exactly when the mutation actually happens. It stops short of naming alternatives (e.g. when to prefer plan_company_data_migration first), so there is context but no exclusions.

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

plan_company_data_migrationA

Propose how to map an existing company_profile.json and financials.json.

Read-only: nothing is written. Reports which source fields are already valid, which ones can be mapped and how, which information would be dropped, and the questions that must be answered before the data can be migrated.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/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 it does disclose the critical behavioral trait: 'Read-only: nothing is written.' It also enumerates what the report contains (valid fields, mappable fields, dropped data, open questions). It omits auth requirements and any limits, but for a zero-parameter analysis tool the read-only guarantee is the trait that matters most.

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?

Front-loads the core action in the first sentence, then qualifies with the read-only guarantee and the report contents. Three tight sentences, zero filler, nothing repeated.

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?

An output schema exists, so the description need not explain return values, and it correctly focuses on what the plan is based on and that it is non-mutating. The one gap is the lack of explicit positioning against the apply_company_data_migration sibling, which matters in a cluster of migration-related tools.

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?

The tool takes zero parameters, so there is no parameter surface to explain; the baseline of 4 applies. The implicit target files are named in prose, which is a small bonus but not a substitute for real parameter documentation.

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 and resource: it proposes a field mapping between company_profile.json and financials.json, and clearly frames itself as a planning/analysis step. It does not, however, explicitly differentiate itself from the sibling apply_company_data_migration or inspect_company_data, leaving the agent to infer the routing.

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 rather than stated: the mention of 'questions that must be answered before the data can be migrated' situates it as a pre-migration step, and it hints at sequencing before apply_company_data_migration. But it never names an alternative tool or states the explicit condition for choosing this over inspect_company_data.

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

read_company_fileB

Read a supported company TXT, MD, JSON, CSV, XLSX, PDF, or DOCX file as text.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/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 discloses supported formats, which is useful, but says nothing about permissions, failure modes for unsupported types, size limits, encoding, or whether PDFs/DOCX are extracted versus read raw.

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 front-loaded sentence with no filler; every word (operation, scope, supported formats, output type) earns its place.

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?

The output schema exists, so return values need not be explained, and the tool is simple with one parameter. However, with no annotations and no schema descriptions, the description omits filename semantics and any safety/auth context, leaving a gap an agent would want filled.

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. Listing the supported extensions partially constrains the single 'filename' parameter, but it never states path format, case sensitivity, or base directory, so it only partly fills the 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?

States a specific verb (Read) and resource (company TXT/MD/JSON/CSV/XLSX/PDF/DOCX file) and clarifies the output is text. It is distinguishable from list_company_files or inspect_company_data, though it never explicitly names a sibling to route the agent.

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 prerequisites, and no mention of alternatives such as list_company_files or inspect_company_data. Usage is only implied by the verb 'Read'.

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

update_company_notesC

Create or update a company policy, meeting, strategy, or vision note.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
note_titleYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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 implies upsert semantics (existing note replaced based on title) but never states what happens to an existing note, whether write permission is required, or whether the operation is destructive. This is a significant gap for a mutation tool.

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 efficient sentence with the action front-loaded. Nothing is wasted, though it is arguably under-specified rather than over-verbose.

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?

An output schema exists so return values need not be described, but for a 2-required-parameter mutation tool with zero annotation coverage and zero schema descriptions, the description leaves the agent without enough information to invoke it 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% for both required parameters, so the description must compensate. It hints that note_title acts as the identity key for the create-or-update behavior, but it says nothing about the content parameter, its length limits, or accepted formats.

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 clear verb pair (create or update) and a specific resource (company notes) with enumerated note categories (policy, meeting, strategy, vision). It does not distinguish itself from siblings such as add_financial_record or add_employee, but the resource is unambiguous.

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 guidance on when to use this versus other company-data tools, nor any statement of prerequisites, ownership, or scope. The only usage hint is the implicit upsert implied by 'create or update', which is not elaborated.

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. 11 tool updatesv0.2.0
    • First observedadd_employee
    • First observedadd_financial_record
    • First observedapply_company_data_migration
    • First observedcreate_new_company
    • First observedget_company_overview
    • First observedinspect_company_data
    • First observedlist_company_files
    • First observedmigrate_company_data
    • First observedplan_company_data_migration
    • First observedread_company_file
    • First observedupdate_company_notes

TDQS

B3.2/5.0

Scored across 11 tools

Disambiguation3/5

Most tools have distinct purposes, but the migration surface is muddled: migrate_company_data (employees.csv) vs plan_company_data_migration and apply_company_data_migration (company_profile.json/financials.json) split similar work across overlapping tools, making misselection easy. update_company_notes also partially overlaps with create_new_company's profile creation.

Naming Consistency4/5

Nearly all tools follow a consistent verb_noun snake_case pattern (add_employee, list_company_files, create_new_company). Minor deviation: some names carry the redundant 'company' prefix (read_company_file, inspect_company_data) while others don't (add_employee, add_financial_record), but the style remains readable and predictable.

Tool Count4/5

11 tools is a reasonable, well-scoped set for a file-based company manager. Slight bloat in the migration area—three plan/apply/migrate tools address essentially one concern—but overall each tool earns its place.

Completeness3/5

Creation and read paths are covered (create_new_company, add_employee, add_financial_record, read/list/inspect files), but there are no update or delete operations for employees or financial records, and no way to edit the company profile after creation. These gaps in the lifecycle will force agents to fall back on raw file writes.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Provides AI assistants with a local knowledge base and research library, enabling semantic and full-text retrieval, memory persistence, and multi-agent collaboration via 58 MCP tools.
    76
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    An AI-first business and project management tool that stores data locally in Markdown and JSON files, exposed via the Model Context Protocol (MCP). Enables project, issue, client, contact, and note management through natural language.
    25
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides a local vector memory store for AI agents with semantic search, offline embeddings, and MCP integration, enabling tools like Claude and Cursor to store and retrieve information without cloud dependencies.
    7 npm
    MIT
  • F
    license
    B
    quality
    C
    maintenance
    A fully local, privacy-first MCP server that gives AI coding assistants deep repository intelligence with file-and-line-cited answers, persistent semantic memory, and agentic abilities like task planning and code review—all without any cloud API calls.
    23
    -