Gripp MCP by usefulapi
Read projects, invoices, hours and contacts; register hours, create tasks in Gripp.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"gripp": {
"url": "https://gripp.usefulapi.io/mcp"
}
}
}远程端点
https://gripp.usefulapi.io/mcpstreamable-http它能做什么
工具清单
工具(14)
🟢gripp_list_companies(filters, max_results, first_result, order_by, direction)
List companies in Gripp. Companies (customers, suppliers, prospects) with address, VAT/COC numbers, customer number and active flag. Supports filters, paging (max 250 per call) and ordering. Gripp API: company.get.
输入模式
{
"type": "object",
"properties": {
"filters": {
"description": "Optional filters, all combined with AND. Custom fields cannot be filtered.",
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$",
"description": "Full field name, for example project.archived or hour.date."
},
"operator": {
"type": "string",
"enum": [
"in",
"notin",
"equals",
"notequals",
"between",
"greaterequals",
"greater",
"lessequals",
"less",
"like",
"isnull",
"isnotnull"
],
"description": "Comparison operator. 'like' uses SQL wildcards, for example %Acme%."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
],
"description": "Value to compare. Use an array for in/notin."
},
"value2": {
"description": "Second value, only for 'between'.",
"type": [
"string",
"number"
]
}
},
"required": [
"field",
"operator",
"value"
]
}
},
"max_results": {
"description": "Rows per page (default 50, maximum 250).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
},
"first_result": {
"description": "Offset of the first row (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"order_by": {
"description": "Field to sort by, for example company.id. Default: id.",
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$"
},
"direction": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gripp_list_contacts(filters, max_results, first_result, order_by, direction)
List contacts in Gripp. Contact persons with name, e-mail, phone, function and the company id. Supports filters, paging (max 250 per call) and ordering. Gripp API: contact.get.
输入模式
{
"type": "object",
"properties": {
"filters": {
"description": "Optional filters, all combined with AND. Custom fields cannot be filtered.",
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$",
"description": "Full field name, for example project.archived or hour.date."
},
"operator": {
"type": "string",
"enum": [
"in",
"notin",
"equals",
"notequals",
"between",
"greaterequals",
"greater",
"lessequals",
"less",
"like",
"isnull",
"isnotnull"
],
"description": "Comparison operator. 'like' uses SQL wildcards, for example %Acme%."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
],
"description": "Value to compare. Use an array for in/notin."
},
"value2": {
"description": "Second value, only for 'between'.",
"type": [
"string",
"number"
]
}
},
"required": [
"field",
"operator",
"value"
]
}
},
"max_results": {
"description": "Rows per page (default 50, maximum 250).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
},
"first_result": {
"description": "Offset of the first row (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"order_by": {
"description": "Field to sort by, for example company.id. Default: id.",
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$"
},
"direction": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gripp_list_projects(filters, max_results, first_result, order_by, direction)
List projects in Gripp. Projects with name, number, phase, company, account manager, dates, totals and archived flag. Supports filters, paging (max 250 per call) and ordering. Gripp API: project.get.
输入模式
{
"type": "object",
"properties": {
"filters": {
"description": "Optional filters, all combined with AND. Custom fields cannot be filtered.",
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$",
"description": "Full field name, for example project.archived or hour.date."
},
"operator": {
"type": "string",
"enum": [
"in",
"notin",
"equals",
"notequals",
"between",
"greaterequals",
"greater",
"lessequals",
"less",
"like",
"isnull",
"isnotnull"
],
"description": "Comparison operator. 'like' uses SQL wildcards, for example %Acme%."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
],
"description": "Value to compare. Use an array for in/notin."
},
"value2": {
"description": "Second value, only for 'between'.",
"type": [
"string",
"number"
]
}
},
"required": [
"field",
"operator",
"value"
]
}
},
"max_results": {
"description": "Rows per page (default 50, maximum 250).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
},
"first_result": {
"description": "Offset of the first row (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"order_by": {
"description": "Field to sort by, for example company.id. Default: id.",
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$"
},
"direction": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gripp_list_tasks(filters, max_results, first_result, order_by, direction)
List tasks in Gripp. Tasks with description, phase, deadline, estimated hours, company and completion state. Supports filters, paging (max 250 per call) and ordering. Gripp API: task.get.
输入模式
{
"type": "object",
"properties": {
"filters": {
"description": "Optional filters, all combined with AND. Custom fields cannot be filtered.",
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$",
"description": "Full field name, for example project.archived or hour.date."
},
"operator": {
"type": "string",
"enum": [
"in",
"notin",
"equals",
"notequals",
"between",
"greaterequals",
"greater",
"lessequals",
"less",
"like",
"isnull",
"isnotnull"
],
"description": "Comparison operator. 'like' uses SQL wildcards, for example %Acme%."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
],
"description": "Value to compare. Use an array for in/notin."
},
"value2": {
"description": "Second value, only for 'between'.",
"type": [
"string",
"number"
]
}
},
"required": [
"field",
"operator",
"value"
]
}
},
"max_results": {
"description": "Rows per page (default 50, maximum 250).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
},
"first_result": {
"description": "Offset of the first row (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"order_by": {
"description": "Field to sort by, for example company.id. Default: id.",
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$"
},
"direction": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gripp_list_hours(filters, max_results, first_result, order_by, direction)
List hours in Gripp. Time registrations (hours) with date, amount, employee, task, status and description. Supports filters, paging (max 250 per call) and ordering. Gripp API: hour.get.
输入模式
{
"type": "object",
"properties": {
"filters": {
"description": "Optional filters, all combined with AND. Custom fields cannot be filtered.",
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$",
"description": "Full field name, for example project.archived or hour.date."
},
"operator": {
"type": "string",
"enum": [
"in",
"notin",
"equals",
"notequals",
"between",
"greaterequals",
"greater",
"lessequals",
"less",
"like",
"isnull",
"isnotnull"
],
"description": "Comparison operator. 'like' uses SQL wildcards, for example %Acme%."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
],
"description": "Value to compare. Use an array for in/notin."
},
"value2": {
"description": "Second value, only for 'between'.",
"type": [
"string",
"number"
]
}
},
"required": [
"field",
"operator",
"value"
]
}
},
"max_results": {
"description": "Rows per page (default 50, maximum 250).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
},
"first_result": {
"description": "Offset of the first row (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"order_by": {
"description": "Field to sort by, for example company.id. Default: id.",
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$"
},
"direction": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gripp_list_invoices(filters, max_results, first_result, order_by, direction)
List invoices in Gripp. Sales invoices with number, date, status, company, totals, amount paid and open amount. Supports filters, paging (max 250 per call) and ordering. Gripp API: invoice.get.
输入模式
{
"type": "object",
"properties": {
"filters": {
"description": "Optional filters, all combined with AND. Custom fields cannot be filtered.",
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$",
"description": "Full field name, for example project.archived or hour.date."
},
"operator": {
"type": "string",
"enum": [
"in",
"notin",
"equals",
"notequals",
"between",
"greaterequals",
"greater",
"lessequals",
"less",
"like",
"isnull",
"isnotnull"
],
"description": "Comparison operator. 'like' uses SQL wildcards, for example %Acme%."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
],
"description": "Value to compare. Use an array for in/notin."
},
"value2": {
"description": "Second value, only for 'between'.",
"type": [
"string",
"number"
]
}
},
"required": [
"field",
"operator",
"value"
]
}
},
"max_results": {
"description": "Rows per page (default 50, maximum 250).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
},
"first_result": {
"description": "Offset of the first row (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"order_by": {
"description": "Field to sort by, for example company.id. Default: id.",
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$"
},
"direction": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gripp_list_offers(filters, max_results, first_result, order_by, direction)
List offers in Gripp. Quotes (offers) with number, name, date, phase, company, totals and acceptance status. Supports filters, paging (max 250 per call) and ordering. Gripp API: offer.get.
输入模式
{
"type": "object",
"properties": {
"filters": {
"description": "Optional filters, all combined with AND. Custom fields cannot be filtered.",
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$",
"description": "Full field name, for example project.archived or hour.date."
},
"operator": {
"type": "string",
"enum": [
"in",
"notin",
"equals",
"notequals",
"between",
"greaterequals",
"greater",
"lessequals",
"less",
"like",
"isnull",
"isnotnull"
],
"description": "Comparison operator. 'like' uses SQL wildcards, for example %Acme%."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
],
"description": "Value to compare. Use an array for in/notin."
},
"value2": {
"description": "Second value, only for 'between'.",
"type": [
"string",
"number"
]
}
},
"required": [
"field",
"operator",
"value"
]
}
},
"max_results": {
"description": "Rows per page (default 50, maximum 250).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
},
"first_result": {
"description": "Offset of the first row (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"order_by": {
"description": "Field to sort by, for example company.id. Default: id.",
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$"
},
"direction": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gripp_list_employees(filters, max_results, first_result, order_by, direction)
List employees in Gripp. Employees with name, e-mail, function, department, role and active flag. Supports filters, paging (max 250 per call) and ordering. Gripp API: employee.get.
输入模式
{
"type": "object",
"properties": {
"filters": {
"description": "Optional filters, all combined with AND. Custom fields cannot be filtered.",
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$",
"description": "Full field name, for example project.archived or hour.date."
},
"operator": {
"type": "string",
"enum": [
"in",
"notin",
"equals",
"notequals",
"between",
"greaterequals",
"greater",
"lessequals",
"less",
"like",
"isnull",
"isnotnull"
],
"description": "Comparison operator. 'like' uses SQL wildcards, for example %Acme%."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
],
"description": "Value to compare. Use an array for in/notin."
},
"value2": {
"description": "Second value, only for 'between'.",
"type": [
"string",
"number"
]
}
},
"required": [
"field",
"operator",
"value"
]
}
},
"max_results": {
"description": "Rows per page (default 50, maximum 250).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
},
"first_result": {
"description": "Offset of the first row (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"order_by": {
"description": "Field to sort by, for example company.id. Default: id.",
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$"
},
"direction": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gripp_list_tags(filters, max_results, first_result, order_by, direction)
List tags in Gripp. Tags that Gripp uses to label companies, contacts, projects and invoices. Supports filters, paging (max 250 per call) and ordering. Gripp API: tag.get.
输入模式
{
"type": "object",
"properties": {
"filters": {
"description": "Optional filters, all combined with AND. Custom fields cannot be filtered.",
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$",
"description": "Full field name, for example project.archived or hour.date."
},
"operator": {
"type": "string",
"enum": [
"in",
"notin",
"equals",
"notequals",
"between",
"greaterequals",
"greater",
"lessequals",
"less",
"like",
"isnull",
"isnotnull"
],
"description": "Comparison operator. 'like' uses SQL wildcards, for example %Acme%."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
],
"description": "Value to compare. Use an array for in/notin."
},
"value2": {
"description": "Second value, only for 'between'.",
"type": [
"string",
"number"
]
}
},
"required": [
"field",
"operator",
"value"
]
}
},
"max_results": {
"description": "Rows per page (default 50, maximum 250).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
},
"first_result": {
"description": "Offset of the first row (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"order_by": {
"description": "Field to sort by, for example company.id. Default: id.",
"type": "string",
"pattern": "^[a-z]+\\.[A-Za-z0-9_]+$"
},
"direction": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gripp_get_record(entity, id)
Get one Gripp record by its numeric id, for companies, contacts, projects, tasks, hours, invoices, offers, employees or invoice lines. Gripp API: <entity>.getone.
输入模式
{
"type": "object",
"properties": {
"entity": {
"type": "string",
"enum": [
"company",
"contact",
"project",
"task",
"hour",
"invoice",
"invoiceline",
"offer",
"employee"
],
"description": "The record type."
},
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The numeric id (from a gripp_list_* tool)."
}
},
"required": [
"entity",
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gripp_list_invoice_lines(invoice_id, max_results, first_result)
List invoice lines (description, amount, price, VAT) for one invoice id. Use this to see what an invoice contains. Gripp API: invoiceline.get.
输入模式
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The invoice id (from gripp_list_invoices)."
},
"max_results": {
"description": "Rows per page (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
},
"first_result": {
"description": "Offset of the first row (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴gripp_create_hour(offerprojectbase, task, employee, date, amount, ...)
WRITE: register hours on a project (and optionally a task) in Gripp. Creates a new time registration each call; a repeat creates a duplicate. Status CONCEPT keeps it editable. Gripp API: hour.create.
输入模式
{
"type": "object",
"properties": {
"offerprojectbase": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The project id (from gripp_list_projects) the hours belong to."
},
"task": {
"description": "Optional task id (from gripp_list_tasks).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"employee": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The employee id (from gripp_list_employees)."
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date of the work, yyyy-mm-dd."
},
"amount": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 24,
"description": "Hours worked, for example 1.5."
},
"description": {
"description": "What was done.",
"type": "string",
"maxLength": 2000
},
"status": {
"description": "Default CONCEPT.",
"type": "string",
"enum": [
"CONCEPT",
"DEFINITIVE"
]
}
},
"required": [
"offerprojectbase",
"employee",
"date",
"amount"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴gripp_create_task(description, company, content, deadlinedate, estimatedhours, ...)
WRITE: create a task in Gripp. Creates a new task each call; a repeat creates a duplicate. Gripp API: task.create.
输入模式
{
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Task title."
},
"company": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Company id the task belongs to (from gripp_list_companies)."
},
"content": {
"description": "Longer task text.",
"type": "string",
"maxLength": 10000
},
"deadlinedate": {
"description": "Deadline, yyyy-mm-dd.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"estimatedhours": {
"description": "Estimated hours.",
"type": "number",
"exclusiveMinimum": 0
},
"preferredemployee": {
"description": "Employee id to assign.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"description",
"company"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴gripp_create_contact(company, lastname, firstname, email, phone, ...)
WRITE: create a contact person on a company in Gripp. Creates a new contact each call; a repeat creates a duplicate. Gripp API: contact.create.
输入模式
{
"type": "object",
"properties": {
"company": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Company id (from gripp_list_companies)."
},
"lastname": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Last name."
},
"firstname": {
"description": "First name.",
"type": "string",
"maxLength": 200
},
"email": {
"description": "E-mail address.",
"type": "string",
"maxLength": 320
},
"phone": {
"description": "Phone number.",
"type": "string",
"maxLength": 50
},
"function": {
"description": "Job title.",
"type": "string",
"maxLength": 200
}
},
"required": [
"company",
"lastname"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社区
证据