AI Company Manager MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AI Company Manager MCP ServerAdd a new employee: Alice Johnson, Software Engineer."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AI Company Manager MCP Server
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:
Exposes the request as a validated MCP tool.
Reads or atomically updates files inside the
company_data/directory.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-0001style IDsCompany 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 cellsNo credentials required: never talks to an external service
One-command install: Windows, Linux and macOS
MCP
stdiotransport (JSON-RPC 2.0)
Requirements
Python 3.10 or newer
Internet access (only to download dependencies during the first install)
If
uvis installed the setup is much faster; otherwise the standardvenv+pippath 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.11Why
<2? The project uses theFastMCPAPI, so the MCP Python SDK is pinned to the maintained>=1.30,<2range.
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.pyWindows (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.pyAfter 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:
Creates the environment. Builds a
.venvinside the project and installs everything inrequirements.txt. Usesuvwhen available (very fast), otherwise falls back tovenv+pip.Writes the MCP configuration. Adds the
ai-company-managerserver to<project>/.cursor/mcp.jsonand~/.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.Verifies the installation. Actually starts the server, sends
initializeandtools/listrequests 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 |
| Deletes and recreates the virtual environment. |
| Only writes the MCP configuration (no dependency install). |
| Leaves |
| 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 configurationManual 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.txtActivate the environment on Windows PowerShell:
.\.venv\Scripts\Activate.ps1To try it interactively with MCP Inspector:
mcp dev src/server.py
mcp devrequires Node.js andnpx. The server speaks overstdioand 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 |
| Lists every file in the data directory with type, size and modification time. | — |
| Returns a summary of profile, budget, income, expenses, net cash flow and current balance. | — |
| Converts a supported file into text the AI can analyze. |
|
| Creates the profile, financial file and founder row. |
|
| Appends an |
|
| Appends a validated employee record to |
|
| Creates or updates a policy, meeting, strategy or vision note. |
|
| Reports whether each core file matches the expected schema, and why not. | — |
| Converts an existing | — ( |
| Proposes a field mapping for an existing | — |
| Writes the mapping you confirmed. Answers every open item first. | — ( |
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 name, sector, founding year, departments, vision, mission, metrics |
| Budget, income/expense categories, transactions, cash flow summary |
| Founder and employee records ( |
| Company notes (created on the first |
| 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
| The key and value already satisfy the canonical model and are reused unchanged. |
| A rule can convert it. |
| Two source fields target the same canonical field; the first one wins. |
| The value cannot be used as it is, with the reason. |
| No canonical field exists. Known risky fields such as |
| 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:
trueaccepts 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
trueand 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 |
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 |
DOCX | All paragraphs and all tables are extracted (tables under a |
Writing PDF/DOCX | Rejected: these formats are read-only. |
Missing dependency | A clear error is returned including the install command. |
Configuration
Variable | Default | Description |
|
| Absolute path, or relative to the project root. |
|
| 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, notesDevelopment
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
pytestWith coverage:
pytest --cov=src --cov-report=term-missingTests 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 handshakeTo 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:
rufflint and format check,mypytype checkpytestwith coverage on Ubuntu, Windows, and macOS across Python 3.10-3.13Installer smoke test (
install.py --check) on all three operating systems
Roadmap
Automated test suite (
pytest) and CI workflowRead existing
employees.csvwith common column names; schema inspection and migrationRead-only mapping proposals for existing
company_profile.jsonandfinancials.jsonApply a confirmed
company_profile.json/financials.jsonmapping with a backupPeriod breakdown table for budget and cash flow
Update and delete operations for financial records and employees
Character budget for
read_company_fileoutput and PDF page rangesExcel/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 && pytestWhen 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 ContributorsAvailable Tools
11 toolsadd_employeeC
Append a validated employee record to employees.csv.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| role | Yes | ||
| salary | Yes | ||
| department | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| amount | Yes | ||
| category | Yes | ||
| description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No | ||
| answers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sector | Yes | ||
| company_name | Yes | ||
| initial_budget | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| note_title | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
11 tool updates
v0.2.0- First observed
add_employee - First observed
add_financial_record - First observed
apply_company_data_migration - First observed
create_new_company - First observed
get_company_overview - First observed
inspect_company_data - First observed
list_company_files - First observed
migrate_company_data - First observed
plan_company_data_migration - First observed
read_company_file - First observed
update_company_notes
TDQS
Scored across 11 tools
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.
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.
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.
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
Related MCP Connectors
MCP-native notes and memory for ChatGPT, Claude, and other AI tools.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
- AurentiaOAuthfr.aurentia
Your Aurentia workspace — projects, CRM, tasks, deliverables — in Claude, Cursor or any MCP client.
- TaprootOAuthcom.taproothq
Persistent memory layer for AI tools. Save and recall notes across Claude and other MCP clients.
Related MCP Servers
- AlicenseBqualityAmaintenanceProvides 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.762MIT
- AlicenseAqualityCmaintenanceAn 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.25MIT
- AlicenseNot gradedqualityBmaintenanceProvides 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 npmMIT
- FlicenseBqualityCmaintenanceA 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-