Unanet GovCon ERP MCP Server
Click on "Install 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., "@Unanet GovCon ERP MCP ServerGive me an executive briefing on all projects"
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.
Unanet GovCon ERP MCP Server
Transform your 30-minute Unanet reports into 30-second conversations with AI
šÆ For GovCon Leaders Who Are Tired Of:
Clicking through 10 screens to answer one question
Waiting 20 minutes for reports that should take 20 seconds
Training new employees on complex ERP navigation
Missing critical project updates buried in data
Related MCP server: Kion MCP Server
š What if you could just ask: "Give me an executive briefing on all projects"?

ā±ļø Save 2-4 hours per week on ERP tasks:
Project Managers: Instant status updates, resource allocation checks, budget tracking
Executives: Daily briefings in seconds, not spreadsheets
Finance Teams: Real-time billing status, instant invoice generation
Everyone: No more clicking through 10 screens to find one answer
š” See It In Action
From Complex Navigation to Simple Questions
Before: Log in ā Projects ā Select Project ā Export ā Format in Excel ā Write Summary (15-30 min)
After: "What's the status of all active projects?" (30 seconds)

šÆ Quick Start
For Windows Users: Download ā Run setup-windows.bat ā Done! Detailed Guide
For Technical Users: See Installation below
šÆ What You Can Do
Ask Claude natural questions about your Unanet data:
ā "Show me all projects over budget" ā "Submit 8 hours to Project Alpha for today" ā "Generate a compliance report for Q4" ā "Which team members are overallocated next month?" ā "Create an invoice for project DEF456"
No more memorizing menu paths or waiting for reports to load!
š° ROI & Time Savings
Based on real GovCon operations:
Project Managers: Save 2-4 hours per week
Executives: Save 1-2 hours daily on status updates
Finance Teams: Cut monthly billing reconciliation time by 75%
Everyone: Get answers in seconds, not minutes
Real Example: Executive Daily Briefing
Traditional Method: Run reports ā Export data ā Analyze ā Format (20+ minutes) With Claude: "Give me an exec daily briefing" (30 seconds)
Executive Daily Briefing - Unanet Projects
⢠Portfolio Health: 2 active projects ($350K total budget) tracking on schedule
⢠Project Alpha: 50% complete with proportional budget burn - entering critical phase
⢠Project Beta: Early stage execution at 25% complete, healthy trajectory
⢠Resource Status: Team allocation stable, no conflicts identified
⢠Risk Assessment: All projects green status
Recommended Action: Schedule mid-project review for Alpha this week
šø See More Power User Examples
Features
Tools Available
Project Management
unanet_get_projects- List all projects with filtering optionsunanet_get_project_details- Get detailed information about a specific projectunanet_update_project_budget- Update project budgetunanet_get_project_status- Get project status and dashboard metrics
Time & Expense Tracking
unanet_submit_timesheet- Submit time entriesunanet_get_timesheets- Retrieve timesheets for a date rangeunanet_submit_expense- Submit expense reportsunanet_approve_timesheet- Approve submitted timesheets
Contact Management
unanet_create_contact- Create new contactsunanet_update_lead- Update lead informationunanet_create_opportunity- Create new opportunitiesunanet_get_company_info- Get company details
Financial Operations
unanet_get_billing_status- Get project billing informationunanet_generate_invoice- Generate project invoicesunanet_get_financial_report- Generate various financial reports
Resources Available
unanet://projects/active- List of active projectsunanet://timesheets/templates- Timesheet templates and common entries
Installation
šŖ Windows Users (Recommended)
Download the project:
Download from GitHub as a ZIP file
Extract to
C:\UnanetMCP\
Run the automated setup:
Double-click
setup-windows.batFollow the prompts
That's it! See Windows Setup Guide for detailed instructions.
š§ Mac/Linux Users
Clone this repository:
git clone https://github.com/culstrup/unanet-mcp-server.git
cd unanet-mcp-serverInstall dependencies:
npm installBuild the project:
npm run buildSet up your environment variables:
cp .env.example .env
# Edit .env with your Unanet credentialsConfiguration
Environment Variables
Create a .env file with your Unanet credentials:
UNANET_USERNAME=your-username
UNANET_PASSWORD=your-password
UNANET_API_KEY=your-api-key
UNANET_FIRM_CODE=your-firm-code
UNANET_BASE_URL=https://your-instance.unanet.comClaude Desktop Configuration
Add the following to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"unanet": {
"command": "node",
"args": ["/absolute/path/to/unanet-mcp-server/dist/index.js"],
"env": {
"UNANET_USERNAME": "your-username",
"UNANET_PASSWORD": "your-password",
"UNANET_API_KEY": "your-api-key",
"UNANET_FIRM_CODE": "your-firm-code",
"UNANET_BASE_URL": "https://your-instance.unanet.com"
}
}
}
}Usage Examples
Once configured, you can interact with Unanet through Claude:
Project Management
"Show me all active projects"
"Get details for project ABC123"
"Update the budget for project XYZ to $150,000"
"What's the status of the government contract project?"Time Tracking
"Submit 8 hours for project ABC123 for today"
"Show my timesheets for last week"
"Approve timesheet TS-2024-001"Financial Reports
"Generate a project profitability report for Q4"
"Show billing status for project DEF456"
"Create an invoice for the last billing period"Contact Management
"Create a new contact: John Smith from ABC Corp"
"Update the lead status to 'Proposal' with 75% probability"
"Create a new opportunity worth $500k closing next month"Development
Running in Development Mode
npm run devProject Structure
src/
āāā index.ts # Main server entry point
āāā auth.ts # Authentication handling
āāā tools/ # MCP tool implementations
ā āāā projects.ts # Project management tools
ā āāā timesheet.ts # Time/expense tools
ā āāā contacts.ts # Contact management
ā āāā financials.ts # Financial tools
āāā resources/ # MCP resource providers
ā āāā reports.ts # Report resources
āāā types/ # TypeScript type definitions
āāā unanet.ts # Unanet API typesAdding New Tools
Create a new tool in the appropriate file under
src/tools/Export the tool definition with:
name: Unique tool identifierdescription: Clear description of what the tool doesinputSchema: Zod schema for input validationhandler: Async function that executes the tool
Import and add the tool to the
toolsarray insrc/index.ts
Security Considerations
Never commit your
.envfileUse environment variables for all sensitive data
The server implements rate limiting protection
All API calls use HTTPS
Credentials are transmitted using Basic Auth + API Key
Troubleshooting
Authentication Errors
Verify your credentials in the
.envfileEnsure your API key has the necessary permissions
Check that your firm code is correct
Connection Issues
Verify the
UNANET_BASE_URLis correctCheck network connectivity
Ensure the Unanet API is accessible from your network
Claude Desktop Integration
Restart Claude Desktop after configuration changes
Check the logs for any MCP connection errors
Verify the absolute path to the server is correct
Support
For issues or questions:
Check the Unanet API documentation
Review the MCP documentation at https://modelcontextprotocol.io
Open an issue in this repository
šÆ Getting Started Today
Option 1: Quick Setup (Windows)
Download this repository
Run
setup-windows.batStart asking Claude about your Unanet data!
Option 2: Manual Setup See Installation for Mac/Linux or advanced setup
š¬ Join the Conversation
Are you using AI to transform your GovCon operations? Let's connect!
š Star this repo if you find it useful
š Share your Unanet automation success stories
š” Suggest features or improvements via Issues
About GSD at Work LLC
We help GovCon CEOs integrate AI into their core business operations and accelerate growth. From DoD contractors to civilian agencies, we're transforming how government contractors work.
What We Do:
AI Strategy & Implementation for GovCons
ERP Integration & Automation
Custom AI Solutions for Compliance & Operations
Let's Talk: christian@gsdat.work | gsdat.work
Because your time should be spent winning contracts, not wrestling with ERPs.
License
MIT License - Copyright (c) 2025 GSD at Work LLC - See LICENSE file for details
Available Tools
15 toolsunanet_approve_timesheetB
Approve a submitted timesheet
| Name | Required | Description | Default |
|---|---|---|---|
| comments | No | Approval comments | |
| timesheetId | Yes | The ID of the timesheet to approve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states the action. It does not mention side effects (e.g., irreversible, sends notifications), required state of the timesheet, or response format. This is minimal beyond the name.
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?
The description is a single concise sentence with no unnecessary words, front-loading the essential action.
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?
Despite the simple tool shape (2 params, no output schema), the absence of annotations means the description should supply context about the approval workflow, such as checking timesheet status or using get_timesheets first. It lacks this, leaving the agent under-informed.
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 100%, with both parameters having clear descriptions (timesheetId and comments). The tool description adds no extra parameter meaning, so the baseline of 3 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?
The description uses a specific verb 'Approve' with the resource 'timesheet', making the action clear. It is distinct from siblings like submit_timesheet and get_timesheets, which are different operations.
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 implies it is used for approving timesheets but provides no explicit guidance on when to use it versus alternatives, nor any prerequisites like timesheet status or required permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_create_contactC
Create a new contact in Unanet
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| notes | No | ||
| phone | No | ||
| title | No | ||
| company | No | ||
| lastName | Yes | ||
| firstName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description merely restates the tool name with no additional behavioral disclosure. There are no annotations, so the description should explain side effects, permissions, duplicate handling, or required fields, but it does not.
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?
The description is a single, concise sentence that is easy to parse, but it lacks any additional structure or useful detail. It is not a tautology but is minimally informative.
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?
Given the tool has 7 parameters, no annotations, and no output schema, the description is far too sparse. An agent cannot determine required fields, potential errors, or expected response without more information.
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 input schema has no descriptions for its seven parameters, and the description does not mention any parameter names or constraints. The agent must infer meaning from 'firstName', 'lastName', and 'email' without any added context.
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 clearly states the tool's function: creating a new contact in Unanet. It uses a specific verb ('Create') and names the resource ('contact'), which distinguishes it from sibling tools like updating leads or creating opportunities.
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 is provided on when to use this tool versus alternatives. There is no mention of prerequisites, whether this is for new contacts only, or how it differs from update operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_create_opportunityC
Create a new opportunity in Unanet
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| notes | No | ||
| stage | Yes | ||
| value | Yes | ||
| closeDate | Yes | Expected close date in YYYY-MM-DD format | |
| contactId | No | ||
| description | No | ||
| probability | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it says nothing about side effects, permissions, validation, or failure modes. This is a critical 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?
The description is a single sentence that is front-loaded and free of fluff. It effectively communicates the tool's primary action without unnecessary detail.
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 creation tool with 8 parameters, no annotations, and no output schema, this description is far from complete. It omits required fields, constraints, and behavioral context, making it inadequate for an agent to invoke correctly.
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 description adds zero information about the 8 parameters. Schema description coverage is only 13%, so the agent must rely on parameter names alone, leaving ambiguous fields like 'stage' undefined.
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 clearly states the verb 'Create' and the resource 'opportunity' within Unanet, distinguishing it from sibling tools like unanet_create_contact. It is specific and 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?
No guidance is given on when to use this tool versus alternatives. It merely states the action without any context, exclusions, or mention of related tools like unanet_update_lead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_generate_invoiceB
Generate an invoice for a project
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| periodEnd | Yes | End date for the invoice period (YYYY-MM-DD) | |
| projectId | Yes | The ID of the project | |
| periodStart | Yes | Start date for the invoice period (YYYY-MM-DD) | |
| includeExpenses | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose side effects and consequences. 'Generate' is vagueāit does not clarify whether this creates a draft, posts the invoice, triggers billing workflows, or requires specific permissions. The agent is left unaware of the tool's impact on project data or external systems.
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?
The description is a single, front-loaded sentence with no redundant wording. It is appropriately sized for the tool's simple purpose, containing no filler or unnecessary details.
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 has no output schema and no annotations, so the description must explain return values, side effects, and edge cases. It does none of thisāthere is no mention of what the agent can expect after calling the tool, such as invoice ID, status, or errors. This is a significant gap for an action with likely financial implications.
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 schema covers descriptions for projectId, periodStart, and periodEnd, but notes and includeExpenses lack explanations. The description adds no meaning beyond 'for a project', which is already evident from the schema. With 60% schema coverage and zero additional parameter context, this dimension is weak.
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 clearly states the verb 'generate' and the resource 'invoice for a project', making the tool's purpose unambiguous. It is distinct from sibling tools, none of which generate invoices, so it is easily distinguished.
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 provides no guidance on when to use this tool versus alternatives like unanet_get_billing_status or unanet_get_financial_report. It fails to mention prerequisites, such as needing billable project hours or a finalized timesheet, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_get_billing_statusC
Get billing status and information for a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does not mention whether the operation is read-only, does not describe the return format, or any side effects. The generic 'Get' implies a read operation but provides no explicit safety or context.
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?
The description is a single sentence with a clear verb and object, keeping it appropriately concise. It is front-loaded and easy to parse, with no wasted words.
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 tool with no output schema and no annotations, the description should explain return values or usage context. It lacks information on what 'billing status and information' includes, and does not differentiate from sibling tools, making it incomplete for an agent to invoke correctly.
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 schema already documents projectId with 100% coverage, so the description does not need to add parameter details. However, the description does not add any semantic context beyond the schema, such as examples or what constitutes a billing status.
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 uses a specific verb 'Get' and resource 'billing status and information for a project', clearly indicating the tool's function. It is distinguishable from siblings like unanet_get_project_status by the billing focus, though it does not explicitly name alternatives.
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 is provided on when to use this tool versus alternatives like unanet_get_project_status or unanet_get_project_details. The description only states what it does, leaving the choice implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_get_company_infoC
Get detailed information about a company
| Name | Required | Description | Default |
|---|---|---|---|
| companyId | Yes | The ID of the company | |
| includeContacts | No |
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 for behavioral disclosure. It only says 'get' and gives no information about return format, permissions, side effects, error behavior, or whether the response includes contacts.
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?
The description is a single concise sentence with no wasted words and front-loads the action. It is appropriately brief for the tool's apparent simplicity, though it omits useful detail that would make it more helpful.
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?
With no output schema and no annotations, the description should provide more context about what 'detailed information' includes and how the includeContacts parameter affects results. It leaves significant gaps that an agent would need to infer.
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 schema describes companyId but includeContacts is undocumented. The description adds no parameter-level meaning and does not compensate for the incomplete schema documentation, despite the schema coverage being only 50%.
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 clearly states the action ('Get') and resource ('company'), which distinguishes it from sibling tools focused on projects, timesheets, and invoices. However, 'detailed information' is somewhat generic and does not specify what fields or scope are included.
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 implies when to use the tool (when company details are needed) based on the resource name, but it provides no explicit alternatives, prerequisites, or exclusions. It does not mention when not to use it or how it compares to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_get_financial_reportC
Generate and retrieve financial reports from Unanet
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | summary | |
| endDate | Yes | Report end date (YYYY-MM-DD) | |
| projectId | No | Optional: Filter by specific project | |
| startDate | Yes | Report start date (YYYY-MM-DD) | |
| reportType | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the only source of behavioral transparency. It only says 'generate and retrieve' without disclosing side effects, whether the report generation is synchronous or asynchronous, required permissions, or data scope. This is insufficient for a tool that likely creates and returns reports.
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?
The description is a single, compact sentence with no redundant words. It is front-loaded and easy to parse, though it sacrifices detail for brevity. The conciseness itself is good, but it borders on under-specification.
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?
Given the tool has 5 parameters (including 2 enums) and no output schema, the description is far too sparse to be complete. It does not explain the variants of financial reports, the meaning of format options, or what the return value looks like. This leaves significant gaps for an agent to select and invoke the tool correctly.
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 input schema covers only 60% of parameters (endDate, projectId, startDate have descriptions, while format and reportType do not). The description adds no parameter-level meaning, such as what report types are available or how format affects the output. The agent must infer parameter semantics solely from the sparse schema.
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 states a clear action ('generate and retrieve') and resource ('financial reports from Unanet'), which is specific enough to understand the basic purpose. However, it does not distinguish this tool from sibling tools like unanet_get_billing_status or unanet_generate_invoice, so it lacks sibling differentiation.
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 provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, typical scenarios, or situations where a different tool would be more appropriate. This leaves the agent without contextual cues for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_get_project_detailsC
Get detailed information about a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the transparency burden. It only restates the function without clarifying read-only behavior, what 'detailed information' includes, or any potential side effects. This is a basic retrieval, but the description adds little beyond the tool name.
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?
The description is a single sentence with no filler, effectively front-loaded and concise.
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 single-parameter retrieval tool, the description is too sparse. It lacks any context about return format, usage context, or differentiation from sibling tools, leaving the agent to infer when and how to invoke it correctly.
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 input schema covers the single parameter (projectId) with a clear description, so schema coverage is 100%. The description does not add extra semantic detail, but the baseline of 3 is appropriate given the schema's completeness.
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 clearly states the action (get) and the resource (detailed information about a specific project). It distinguishes itself from siblings like unanet_get_projects by focusing on a single project, though 'detailed' is somewhat vague.
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 is provided on when to use this tool versus alternatives such as unanet_get_projects or unanet_get_project_status. The description does not mention exclusions or preferred scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_get_projectsC
Get a list of all projects from Unanet
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | All |
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 of behavioral disclosure. It indicates a read operation, but it claims to return 'all projects' while the schema includes a limit parameter defaulting to 50, implying potential truncation. It also does not mention how status filtering affects results or any pagination behavior, leaving key behaviors undisclosed.
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?
The description is concise, only eight words, and front-loads the core action. It is efficient and free of fluff. However, it is under-specified for a tool with two optional parameters, but conciseness itself is strong and the sentence is structurally sound.
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?
Given the lack of annotations, output schema, and the presence of optional parameters, the description is too sparse. It does not explain how to use the limit or status filters, what the return value looks like, or that 'all projects' may be limited. This leaves critical context missing for an agent to correctly invoke the tool beyond its basic purpose.
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 schema description coverage is 0%, and the description does not mention the 'limit' or 'status' parameters at all. Since the schema already provides basic definitions (types, enum, defaults), the description adds no additional meaning. For a tool with low schema coverage, the description must compensate, but it fails to do so.
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 uses the specific verb 'Get' and identifies the resource as 'a list of all projects' from Unanet, which clearly indicates a list operation. This distinguishes it from sibling tools like unanet_get_project_details and unanet_get_project_status, which target specific project details or statuses. However, it does not explicitly name alternatives, so it falls short of a perfect score.
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 provides no explicit guidance on when to use this tool versus alternatives. It simply states the action without mentioning contexts, exclusions, or comparing to the many sibling tools. The only implied usage is that it lists all projects, but no alternative scenarios are addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_get_project_statusC
Get the current status and dashboard data for a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It indicates a read operation ('Get') but provides no behavioral detail such as response format, contained data fields, permission requirements, or whether the data is real-time or cached. The meaning of 'dashboard data' is left entirely undefined.
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?
The description is a single, front-loaded sentence that names the action and resource without fluff. However, the term 'dashboard data' is vague, slightly undermining clarity, but this is a conciseness and structure question, not a completeness issue.
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?
With no output schema, the description should clarify what 'current status and dashboard data' means, but it does not. The tool is also ambiguous against sibling unanet_get_project_details, and no usage context or return details are provided, making the description insufficient for an agent to confidently invoke the 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?
The schema fully documents the single parameter projectId with 'The ID of the project', and the description adds no extra semantic detail. Since schema coverage is 100%, the baseline of 3 applies; the description neither enhances nor clarifies beyond the schema.
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 uses a specific verb ('Get') and identifies the resource ('project status' and 'dashboard data'), clearly conveying the tool's primary purpose. However, it does not distinguish itself from the sibling tool unanet_get_project_details, so the boundary is implicit rather than explicit.
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 is given on when to use this tool versus alternatives like unanet_get_project_details or unanet_get_billing_status. The description implies it is for retrieving status/dashboard information, but it neither states exclusive use cases nor mentions any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_get_timesheetsC
Retrieve timesheets for a date range
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | All | |
| endDate | Yes | End date in YYYY-MM-DD format | |
| startDate | Yes | Start date in YYYY-MM-DD format |
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 only says 'Retrieve timesheets for a date range' ā this is already implied by the tool name. It does not disclose default status behavior (e.g., whether 'All' is used), response format, pagination, or any read-only guarantees beyond the verb 'Retrieve' which is inferred.
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?
The description is a single concise sentence with no fluff. It front-loads the action and resource. However, its brevity borders on under-specification, but that is a completeness issue, not conciseness.
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 has no output schema and no annotations, so the description should provide more context. It omits any mention of default status behavior, possible filters, response structure, or authentication requirements. For a 3-parameter tool, this is insufficient for confident use.
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 67%, but the description adds no meaning beyond the schema. It mentions 'date range' which aligns with startDate/endDate, but the schema already describes those. The status parameter, which is not covered in the description, is left entirely unexplained. The description does not compensate for the missing schema coverage.
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 uses a specific verb 'Retrieve' and names the resource 'timesheets', with a date-range scope. This clearly distinguishes it from sibling tools like submit_timesheet or approve_timesheet, and it is not a tautology.
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 does not state when to use this tool versus alternatives. There is no mention of exclusions, prerequisites, or related tools (e.g., when to use submit_timesheet instead). It only implies its purpose through the verb and resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_submit_expenseC
Submit an expense report to Unanet
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date in YYYY-MM-DD format | |
| amount | Yes | ||
| category | Yes | Expense category (e.g., Travel, Meals, Supplies) | |
| projectId | Yes | ||
| description | Yes | ||
| reimbursable | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility for disclosure. It merely restates the tool's name ('Submit an expense report') without any details on side effects, required permissions, error states, or what happens after submission.
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?
The description is a single sentence with no redundant words, making it concise and front-loaded. However, it is too brief to be fully useful, but for conciseness it's appropriate length.
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 submit action with 6 parameters, no annotations, and no output schema, the description is severely underspecified. It fails to cover prerequisites, success/failure behavior, or parameter details, leaving the agent with too little context to invoke the tool correctly.
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?
With only 33% schema description coverage, the description must compensate, but it mentions no parameters at all. It adds no value beyond the schema fields that have descriptions.
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 uses the specific verb 'Submit' and names the resource 'an expense report', clearly indicating the action. It distinguishes from sibling 'unanet_submit_timesheet' by the resource type, though it doesn't explicitly contrast 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?
Provides no guidance on when to use this tool versus alternatives like unanet_submit_timesheet or unanet_update_project_budget. It only states the basic action, leaving the agent to infer usage from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_submit_timesheetC
Submit time entries to Unanet
| Name | Required | Description | Default |
|---|---|---|---|
| entries | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. However, it merely says 'Submit time entries to Unanet' without revealing what happens upon submission, such as whether it is irreversible, requires prior approval, or affects existing records. This is a significant gap for a mutation tool, as the agent cannot assess potential side effects or required permissions.
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?
The description is one short sentence with no unnecessary words. It is front-loaded with the action and resource, and the phrase 'to Unanet' reinforces the destination without being redundant. Every word contributes to the purpose.
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?
Given the moderate complexity (an array of entries with nested fields) and absence of annotations or output schema, the description is insufficient. It does not clarify the submission workflow, expected outcomes, or any constraints. The agent lacks essential context to use the tool correctly beyond the bare schema.
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 input schema has 0% description coverage, and the description does not compensate. It does not explain what 'entries' means or what fields are necessary (e.g., projectId, date, hours) beyond what the schema already shows. The agent gets no added semantic meaning from the description.
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 clearly states the action ('Submit') and the resource ('time entries'), making it immediately clear what the tool does. It also distinguishes itself from sibling tools like unanet_submit_expense (expense submission) and unanet_get_timesheets (retrieval), correctly identifying its unique scope of submitting time entries.
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 provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, exclusions, or conditions under which another sibling tool (e.g., unanet_approve_timesheet or unanet_get_timesheets) would be more appropriate. The only implied usage is that one would use it to submit time entries, which offers no strategic direction for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_update_leadC
Update lead information in Unanet
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| value | No | ||
| leadId | Yes | ||
| status | No | ||
| probability | No |
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 of behavioral disclosure. It merely restates the tool's purpose ('update lead information') without revealing effects, permissions, idempotency, or any other behavioral traits.
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?
The description is extremely short (one sentence), but it under-specifies rather than being concise. It provides no structural value beyond the tool name, so it is not appropriately sized.
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?
With 5 parameters, no output schema, and no annotations, the description is severely incomplete. It gives no context about required fields, validation, return values, or side effects, making it inadequate for an agent to use 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%, and the description adds no meaning to the parameters. It does not explain what 'value', 'probability', or 'notes' mean in the lead context, nor how they are used in an update.
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 clearly states the tool updates lead information in Unanet, using a specific verb ('update') and resource ('lead'). This distinguishes it from sibling tools like unanet_update_project_budget or unanet_create_opportunity.
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 provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, whether it is for existing leads only, or how it relates to create/read operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unanet_update_project_budgetB
Update the budget for a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Notes about the budget change | |
| budget | Yes | The new budget amount | |
| projectId | Yes | The ID of the project to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden of disclosing behavioral traits. It only indicates a write operation ('Update') without specifying whether the budget is overwritten, whether permissions are required, or what the response will look like.
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?
The description is a single concise sentence that front-loads the core purpose. There is no redundant or unnecessary 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 3-parameter update tool with full schema coverage, the description is minimally viable. However, it lacks any mention of return values, error behavior, or side effects, and there is no output schema or annotations to compensate.
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 100%, so the baseline is 3. The description mentions 'budget' and 'specific project' but adds no meaningful information beyond the schema, which already describes all three parameters adequately.
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 clearly states the action ('Update') and the resource ('budget for a specific project'), distinguishing it from sibling tools like get_project_status or submit_timesheet. It is unambiguous and specific.
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 is provided on when to use this tool versus alternatives (e.g., get_project_details for viewing budget). There are no prerequisites, exclusions, or context about when updating a budget is appropriate.
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. Dates show when Glama detected each change.
15 tool updates
v1.0.0- First observed
unanet_approve_timesheet - First observed
unanet_create_contact - First observed
unanet_create_opportunity - First observed
unanet_generate_invoice - First observed
unanet_get_billing_status - First observed
unanet_get_company_info - First observed
unanet_get_financial_report - First observed
unanet_get_project_details - First observed
unanet_get_project_status - First observed
unanet_get_projects - First observed
unanet_get_timesheets - First observed
unanet_submit_expense - First observed
unanet_submit_timesheet - First observed
unanet_update_lead - First observed
unanet_update_project_budget
TDQS
Most tools are clearly distinct, such as timesheet and expense functions. However, the project-related get tools (get_projects, get_project_details, get_project_status, get_billing_status) overlap in purpose, though each targets a different aspect of a project, which could cause some initial confusion.
All tools consistently follow the unanet_verb_noun pattern, using clear and predictable verbs like get, update, submit, create, approve, and generate. This uniform structure makes the tool set highly navigable.
With 15 tools covering projects, timesheets, expenses, CRM, and billing, the count is well within the typical 3-15 range and each tool serves a specific purpose without bloat. The scope is appropriate for an ERP connector.
The tool set covers core workflows but has notable gaps: expenses only have submit (no get or approve), opportunities only have create, leads only have update, and there is no project creation or deletion. This uneven CRUD coverage means some operations are missing, though the core actions are present.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage projects, tasks, time tracking, and team collaboration through natural language.
Ask questions in plain language, get answers from your business database. No SQL required.
Ask business questions in plain English. Get instant answers from your database, no SQL needed.
Ask data questions in natural language. Get SQL, insights, and charts from your databases.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive interaction with ERPNext systems through natural language, providing secure access to any document type (customers, items, invoices, etc.) with enterprise-grade permission controls and audit logging.MIT

Kion MCP Serverofficial
AlicenseAqualityCmaintenanceEnables interaction with the Kion platform for cloud cost management, governance, and compliance through natural language.27MIT- AlicenseAqualityAmaintenanceEnables financial professionals to interact with QuickBooks Online using natural language for reports, journal entries, bills, expenses, and more.3689311MIT
- FlicenseNot gradedqualityCmaintenanceEnables natural language conflict-of-interest checks, historical relationship analysis, and contract review using Verdantas project data and Deltek records.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/culstrup/unanet-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server