Update MCP

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-02-05 17:07:01 +04:00
parent ae6c6719d2
commit adfef480c3
5 changed files with 122 additions and 367 deletions

View File

@@ -11,7 +11,6 @@ import (
"github.com/modelcontextprotocol/go-sdk/mcp"
"go.probo.inc/probo/pkg/coredata"
"go.probo.inc/probo/pkg/gid"
"go.probo.inc/probo/pkg/mail"
"go.probo.inc/probo/pkg/page"
"go.probo.inc/probo/pkg/probo"
"go.probo.inc/probo/pkg/server/api/authn"
@@ -253,111 +252,6 @@ func (r *Resolver) UpdateVendorTool(ctx context.Context, req *mcp.CallToolReques
return nil, types.NewUpdateVendorOutput(vendor), nil
}
func (r *Resolver) ListPeopleTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListPeopleInput) (*mcp.CallToolResult, types.ListPeopleOutput, error) {
r.MustAuthorize(ctx, input.OrganizationID, probo.ActionPeopleList)
prb := r.ProboService(ctx, input.OrganizationID)
pageOrderBy := page.OrderBy[coredata.PeopleOrderField]{
Field: coredata.PeopleOrderFieldCreatedAt,
Direction: page.OrderDirectionDesc,
}
if input.OrderBy != nil {
pageOrderBy = page.OrderBy[coredata.PeopleOrderField]{
Field: input.OrderBy.Field,
Direction: input.OrderBy.Direction,
}
}
cursor := types.NewCursor(input.Size, input.Cursor, pageOrderBy)
var peopleFilter = coredata.NewPeopleFilter(nil)
if input.Filter != nil {
peopleFilter = coredata.NewPeopleFilter(input.Filter.ExcludeContractEnded)
}
page, err := prb.Peoples.ListForOrganizationID(ctx, input.OrganizationID, cursor, peopleFilter)
if err != nil {
panic(fmt.Errorf("cannot list organization people: %w", err))
}
return nil, types.NewListPeopleOutput(page), nil
}
func (r *Resolver) GetPeopleTool(ctx context.Context, req *mcp.CallToolRequest, input *types.GetPeopleInput) (*mcp.CallToolResult, types.GetPeopleOutput, error) {
r.MustAuthorize(ctx, input.ID, probo.ActionPeopleGet)
prb := r.ProboService(ctx, input.ID)
people, err := prb.Peoples.Get(ctx, input.ID)
if err != nil {
return nil, types.GetPeopleOutput{}, fmt.Errorf("failed to get people: %w", err)
}
return nil, types.GetPeopleOutput{
People: types.NewPeople(people),
}, nil
}
func (r *Resolver) AddPeopleTool(ctx context.Context, req *mcp.CallToolRequest, input *types.AddPeopleInput) (*mcp.CallToolResult, types.AddPeopleOutput, error) {
r.MustAuthorize(ctx, input.OrganizationID, probo.ActionPeopleCreate)
svc := r.ProboService(ctx, input.OrganizationID)
additionalEmails := []mail.Addr{}
if input.AdditionalEmailAddresses != nil {
additionalEmails = input.AdditionalEmailAddresses
}
people, err := svc.Peoples.Create(
ctx,
probo.CreatePeopleRequest{
OrganizationID: input.OrganizationID,
FullName: input.FullName,
PrimaryEmailAddress: input.PrimaryEmailAddress,
AdditionalEmailAddresses: additionalEmails,
Kind: input.Kind,
Position: input.Position,
ContractStartDate: input.ContractStartDate,
ContractEndDate: input.ContractEndDate,
},
)
if err != nil {
return nil, types.AddPeopleOutput{}, fmt.Errorf("failed to create people: %w", err)
}
return nil, types.AddPeopleOutput{
People: types.NewPeople(people),
}, nil
}
func (r *Resolver) UpdatePeopleTool(ctx context.Context, req *mcp.CallToolRequest, input *types.UpdatePeopleInput) (*mcp.CallToolResult, types.UpdatePeopleOutput, error) {
r.MustAuthorize(ctx, input.ID, probo.ActionPeopleUpdate)
svc := r.ProboService(ctx, input.ID)
people, err := svc.Peoples.Update(
ctx,
probo.UpdatePeopleRequest{
ID: input.ID,
FullName: input.FullName,
PrimaryEmailAddress: input.PrimaryEmailAddress,
AdditionalEmailAddresses: input.AdditionalEmailAddresses,
Kind: input.Kind,
Position: UnwrapOmittable(input.Position),
ContractStartDate: UnwrapOmittable(input.ContractStartDate),
ContractEndDate: UnwrapOmittable(input.ContractEndDate),
},
)
if err != nil {
panic(fmt.Errorf("cannot update people: %w", err))
}
return nil, types.UpdatePeopleOutput{
People: types.NewPeople(people),
}, nil
}
func (r *Resolver) ListRisksTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListRisksInput) (*mcp.CallToolResult, types.ListRisksOutput, error) {
r.MustAuthorize(ctx, input.OrganizationID, probo.ActionRiskList)
@@ -1933,3 +1827,13 @@ func (r *Resolver) CancelSignatureRequestTool(ctx context.Context, req *mcp.Call
DeletedDocumentVersionSignatureID: input.DocumentVersionSignatureID,
}, nil
}
func (r *Resolver) ListProfilesTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListProfilesInput) (*mcp.CallToolResult, types.ListProfilesOutput, error) {
return nil, types.ListProfilesOutput{}, fmt.Errorf("listProfiles not implemented")
}
func (r *Resolver) GetProfileTool(ctx context.Context, req *mcp.CallToolRequest, input *types.GetProfileInput) (*mcp.CallToolResult, types.GetProfileOutput, error) {
return nil, types.GetProfileOutput{}, fmt.Errorf("getProfile not implemented")
}
func (r *Resolver) UpdateProfileTool(ctx context.Context, req *mcp.CallToolRequest, input *types.UpdateProfileInput) (*mcp.CallToolResult, types.UpdateProfileOutput, error) {
return nil, types.UpdateProfileOutput{}, fmt.Errorf("updateProfile not implemented")
}

View File

@@ -12,12 +12,11 @@ import (
type ResolverInterface interface {
ListOrganizationsTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListOrganizationsInput) (*mcp.CallToolResult, types.ListOrganizationsOutput, error)
ListVendorsTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListVendorsInput) (*mcp.CallToolResult, types.ListVendorsOutput, error)
ListPeopleTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListPeopleInput) (*mcp.CallToolResult, types.ListPeopleOutput, error)
ListProfilesTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListProfilesInput) (*mcp.CallToolResult, types.ListProfilesOutput, error)
AddVendorTool(ctx context.Context, req *mcp.CallToolRequest, input *types.AddVendorInput) (*mcp.CallToolResult, types.AddVendorOutput, error)
UpdateVendorTool(ctx context.Context, req *mcp.CallToolRequest, input *types.UpdateVendorInput) (*mcp.CallToolResult, types.UpdateVendorOutput, error)
GetPeopleTool(ctx context.Context, req *mcp.CallToolRequest, input *types.GetPeopleInput) (*mcp.CallToolResult, types.GetPeopleOutput, error)
AddPeopleTool(ctx context.Context, req *mcp.CallToolRequest, input *types.AddPeopleInput) (*mcp.CallToolResult, types.AddPeopleOutput, error)
UpdatePeopleTool(ctx context.Context, req *mcp.CallToolRequest, input *types.UpdatePeopleInput) (*mcp.CallToolResult, types.UpdatePeopleOutput, error)
GetProfileTool(ctx context.Context, req *mcp.CallToolRequest, input *types.GetProfileInput) (*mcp.CallToolResult, types.GetProfileOutput, error)
UpdateProfileTool(ctx context.Context, req *mcp.CallToolRequest, input *types.UpdateProfileInput) (*mcp.CallToolResult, types.UpdateProfileOutput, error)
ListRisksTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListRisksInput) (*mcp.CallToolResult, types.ListRisksOutput, error)
GetRiskTool(ctx context.Context, req *mcp.CallToolRequest, input *types.GetRiskInput) (*mcp.CallToolResult, types.GetRiskOutput, error)
AddRiskTool(ctx context.Context, req *mcp.CallToolRequest, input *types.AddRiskInput) (*mcp.CallToolResult, types.AddRiskOutput, error)
@@ -140,16 +139,16 @@ func registerToolHandlers(server *mcp.Server, resolver ResolverInterface) {
mcp.AddTool(
server,
&mcp.Tool{
Name: "listPeople",
Description: "List all people for the organization",
InputSchema: types.ListPeopleToolInputSchema,
OutputSchema: types.ListPeopleToolOutputSchema,
Name: "listProfiles",
Description: "List all profiles for the organization",
InputSchema: types.ListProfilesToolInputSchema,
OutputSchema: types.ListProfilesToolOutputSchema,
Annotations: &mcp.ToolAnnotations{
ReadOnlyHint: true,
IdempotentHint: true,
},
},
resolver.ListPeopleTool,
resolver.ListProfilesTool,
)
mcp.AddTool(
server,
@@ -174,36 +173,26 @@ func registerToolHandlers(server *mcp.Server, resolver ResolverInterface) {
mcp.AddTool(
server,
&mcp.Tool{
Name: "getPeople",
Description: "Get a people by ID",
InputSchema: types.GetPeopleToolInputSchema,
OutputSchema: types.GetPeopleToolOutputSchema,
Name: "getProfile",
Description: "Get a profile by ID",
InputSchema: types.GetProfileToolInputSchema,
OutputSchema: types.GetProfileToolOutputSchema,
Annotations: &mcp.ToolAnnotations{
ReadOnlyHint: true,
IdempotentHint: true,
},
},
resolver.GetPeopleTool,
resolver.GetProfileTool,
)
mcp.AddTool(
server,
&mcp.Tool{
Name: "addPeople",
Description: "Add a new people to the organization",
InputSchema: types.AddPeopleToolInputSchema,
OutputSchema: types.AddPeopleToolOutputSchema,
Name: "updateProfile",
Description: "Update an existing profile",
InputSchema: types.UpdateProfileToolInputSchema,
OutputSchema: types.UpdateProfileToolOutputSchema,
},
resolver.AddPeopleTool,
)
mcp.AddTool(
server,
&mcp.Tool{
Name: "updatePeople",
Description: "Update an existing people",
InputSchema: types.UpdatePeopleToolInputSchema,
OutputSchema: types.UpdatePeopleToolOutputSchema,
},
resolver.UpdatePeopleTool,
resolver.UpdateProfileTool,
)
mcp.AddTool(
server,

View File

@@ -43,42 +43,42 @@ components:
$ref: "#/components/schemas/OrderDirection"
description: Vendor order direction
PeopleOrderBy:
ProfileOrderBy:
type: object
required:
- field
- direction
properties:
field:
$ref: "#/components/schemas/PeopleOrderField"
description: People order field
$ref: "#/components/schemas/ProfileOrderField"
description: Profile order field
direction:
$ref: "#/components/schemas/OrderDirection"
description: People order direction
description: Profile order direction
PeopleOrderField:
ProfileOrderField:
type: string
enum:
- CREATED_AT
- FULL_NAME
- KIND
go.probo.inc/mcpgen/type: go.probo.inc/probo/pkg/coredata.PeopleOrderField
go.probo.inc/mcpgen/type: go.probo.inc/probo/pkg/coredata.MembershipProfileOrderField
PeopleKind:
ProfileKind:
type: string
enum:
- EMPLOYEE
- CONTRACTOR
- SERVICE_ACCOUNT
go.probo.inc/mcpgen/type: go.probo.inc/probo/pkg/coredata.PeopleKind
go.probo.inc/mcpgen/type: go.probo.inc/probo/pkg/coredata.MembershipProfileKind
People:
Profile:
type: object
required:
- id
- organization_id
- full_name
- primary_email_address
- email_address
- additional_email_addresses
- kind
- created_at
@@ -86,14 +86,14 @@ components:
properties:
id:
$ref: "#/components/schemas/GID"
description: People ID
description: Profile ID
organization_id:
$ref: "#/components/schemas/GID"
description: Organization ID
full_name:
type: string
description: Full name
primary_email_address:
email_address:
$ref: "#/components/schemas/EmailAddress"
description: Primary email address
additional_email_addresses:
@@ -102,8 +102,8 @@ components:
$ref: "#/components/schemas/EmailAddress"
description: Additional email addresses
kind:
$ref: "#/components/schemas/PeopleKind"
description: People kind
$ref: "#/components/schemas/ProfileKind"
description: Profile kind
position:
type:
- string
@@ -130,7 +130,7 @@ components:
format: date-time
description: Update timestamp
ListPeopleInput:
ListProfilesInput:
type: object
required:
- organization_id
@@ -139,8 +139,8 @@ components:
$ref: "#/components/schemas/GID"
description: Organization ID
order_by:
$ref: "#/components/schemas/PeopleOrderBy"
description: People order by
$ref: "#/components/schemas/ProfileOrderBy"
description: Profile order by
size:
type: integer
description: Page size
@@ -152,20 +152,20 @@ components:
properties:
exclude_contract_ended:
type: boolean
description: Exclude people with ended contracts
description: Exclude profiles with ended contracts
ListPeopleOutput:
ListProfilesOutput:
type: object
required:
- people
- profiles
properties:
next_cursor:
$ref: "#/components/schemas/CursorKey"
description: Next cursor
people:
profiles:
type: array
items:
$ref: "#/components/schemas/People"
$ref: "#/components/schemas/Profile"
GID:
type: string
@@ -600,82 +600,34 @@ components:
vendor:
$ref: "#/components/schemas/Vendor"
GetPeopleInput:
GetProfileInput:
type: object
required:
- id
properties:
id:
$ref: "#/components/schemas/GID"
description: People ID
description: Profile ID
GetPeopleOutput:
GetProfileOutput:
type: object
required:
- people
- profile
properties:
people:
$ref: "#/components/schemas/People"
profile:
$ref: "#/components/schemas/Profile"
AddPeopleInput:
type: object
required:
- organization_id
- full_name
- primary_email_address
- kind
properties:
organization_id:
$ref: "#/components/schemas/GID"
description: Organization ID
full_name:
type: string
description: Full name
primary_email_address:
$ref: "#/components/schemas/EmailAddress"
description: Primary email address
additional_email_addresses:
type: array
items:
$ref: "#/components/schemas/EmailAddress"
description: Additional email addresses
kind:
$ref: "#/components/schemas/PeopleKind"
description: People kind
position:
type: string
description: Position
contract_start_date:
type: string
format: date-time
description: Contract start date
contract_end_date:
type: string
format: date-time
description: Contract end date
AddPeopleOutput:
type: object
required:
- people
properties:
people:
$ref: "#/components/schemas/People"
UpdatePeopleInput:
UpdateProfileInput:
type: object
required:
- id
properties:
id:
$ref: "#/components/schemas/GID"
description: People ID
description: Profile ID
full_name:
type: string
description: Full name
primary_email_address:
$ref: "#/components/schemas/EmailAddress"
description: Primary email address
additional_email_addresses:
anyOf:
- type: array
@@ -685,8 +637,8 @@ components:
description: No additional email addresses
description: Additional email addresses
kind:
$ref: "#/components/schemas/PeopleKind"
description: People kind
$ref: "#/components/schemas/ProfileKind"
description: Profile kind
position:
type: ["string", "null"]
description: Position
@@ -702,13 +654,13 @@ components:
description: Contract end date
go.probo.inc/mcpgen/omittable: true
UpdatePeopleOutput:
UpdateProfileOutput:
type: object
required:
- people
- profile
properties:
people:
$ref: "#/components/schemas/People"
profile:
$ref: "#/components/schemas/Profile"
RiskOrderField:
type: string
@@ -4160,7 +4112,7 @@ components:
description: Document version ID
signatory_id:
$ref: "#/components/schemas/GID"
description: Signatory ID (People ID)
description: Signatory ID (Profile ID)
RequestDocumentVersionSignatureOutput:
type: object
@@ -4207,15 +4159,15 @@ tools:
$ref: "#/components/schemas/ListVendorsInput"
outputSchema:
$ref: "#/components/schemas/ListVendorsOutput"
- name: listPeople
description: List all people for the organization
- name: listProfiles
description: List all profiles for the organization
hints:
readonly: true
idempotent: true
inputSchema:
$ref: "#/components/schemas/ListPeopleInput"
$ref: "#/components/schemas/ListProfilesInput"
outputSchema:
$ref: "#/components/schemas/ListPeopleOutput"
$ref: "#/components/schemas/ListProfilesOutput"
- name: addVendor
description: Add a new vendor to the organization
hints:
@@ -4232,31 +4184,23 @@ tools:
$ref: "#/components/schemas/UpdateVendorInput"
outputSchema:
$ref: "#/components/schemas/UpdateVendorOutput"
- name: getPeople
description: Get a people by ID
- name: getProfile
description: Get a profile by ID
hints:
readonly: true
idempotent: true
inputSchema:
$ref: "#/components/schemas/GetPeopleInput"
$ref: "#/components/schemas/GetProfileInput"
outputSchema:
$ref: "#/components/schemas/GetPeopleOutput"
- name: addPeople
description: Add a new people to the organization
$ref: "#/components/schemas/GetProfileOutput"
- name: updateProfile
description: Update an existing profile
hints:
readonly: false
inputSchema:
$ref: "#/components/schemas/AddPeopleInput"
$ref: "#/components/schemas/UpdateProfileInput"
outputSchema:
$ref: "#/components/schemas/AddPeopleOutput"
- name: updatePeople
description: Update an existing people
hints:
readonly: false
inputSchema:
$ref: "#/components/schemas/UpdatePeopleInput"
outputSchema:
$ref: "#/components/schemas/UpdatePeopleOutput"
$ref: "#/components/schemas/UpdateProfileOutput"
- name: listRisks
description: List all risks for the organization
hints:

View File

@@ -1,53 +0,0 @@
// Copyright (c) 2025 Probo Inc <hello@getprobo.com>.
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
package types
import (
"go.probo.inc/probo/pkg/coredata"
"go.probo.inc/probo/pkg/page"
)
func NewPeople(p *coredata.People) *People {
return &People{
FullName: p.FullName,
ID: p.ID,
OrganizationID: p.OrganizationID,
Kind: p.Kind,
PrimaryEmailAddress: p.PrimaryEmailAddress,
AdditionalEmailAddresses: p.AdditionalEmailAddresses,
Position: p.Position,
ContractStartDate: p.ContractStartDate,
ContractEndDate: p.ContractEndDate,
CreatedAt: p.CreatedAt,
UpdatedAt: p.UpdatedAt,
}
}
func NewListPeopleOutput(peoplePage *page.Page[*coredata.People, coredata.PeopleOrderField]) ListPeopleOutput {
people := make([]*People, 0, len(peoplePage.Data))
for _, p := range peoplePage.Data {
people = append(people, NewPeople(p))
}
var nextCursor *page.CursorKey
if len(peoplePage.Data) > 0 {
cursorKey := peoplePage.Data[len(peoplePage.Data)-1].CursorKey(peoplePage.Cursor.OrderBy.Field)
nextCursor = &cursorKey
}
return ListPeopleOutput{
NextCursor: nextCursor,
People: people,
}
}

View File

@@ -35,8 +35,6 @@ var (
AddNonconformityToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"nonconformity":{"type":"object","properties":{"audit_id":{"description":"Audit ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No audit"}]},"corrective_action":{"description":"Corrective action"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"date_identified":{"description":"Date identified","format":"date-time"},"description":{"description":"Description"},"due_date":{"description":"Due date","format":"date-time"},"effectiveness_check":{"description":"Effectiveness check"},"id":{"type":"string","format":"string"},"organization_id":{"type":"string","format":"string"},"owner_id":{"type":"string","format":"string"},"reference_id":{"type":"string","description":"Reference ID"},"root_cause":{"type":"string","description":"Root cause"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"status":{"type":"string","enum":["OPEN","IN_PROGRESS","CLOSED"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","reference_id","root_cause","owner_id","status","created_at","updated_at"]}},"required":["nonconformity"]}`)
AddObligationToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"actions_to_be_implemented":{"type":"string","description":"Actions to be implemented"},"area":{"type":"string","description":"Area"},"due_date":{"type":"string","description":"Due date","format":"date-time"},"last_review_date":{"type":"string","description":"Last review date","format":"date-time"},"organization_id":{"type":"string","format":"string"},"owner_id":{"type":"string","format":"string"},"regulator":{"type":"string","description":"Regulator"},"requirement":{"type":"string","description":"Requirement"},"source":{"type":"string","description":"Source"},"status":{"description":"Status","anyOf":[{"type":"string","enum":["NON_COMPLIANT","PARTIALLY_COMPLIANT","COMPLIANT"]},{"type":"null","description":"No status"}]},"type":{"description":"Type","anyOf":[{"type":"string","enum":["LEGAL","CONTRACTUAL"]},{"type":"null","description":"No type"}]}},"required":["organization_id","owner_id","status","type"]}`)
AddObligationToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"obligation":{"type":"object","properties":{"actions_to_be_implemented":{"description":"Actions to be implemented"},"area":{"description":"Area"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"due_date":{"description":"Due date","format":"date-time"},"id":{"type":"string","format":"string"},"last_review_date":{"description":"Last review date","format":"date-time"},"organization_id":{"type":"string","format":"string"},"owner_id":{"type":"string","format":"string"},"regulator":{"description":"Regulator"},"requirement":{"description":"Requirement"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"source":{"description":"Source"},"source_id":{"description":"Source ID"},"status":{"type":"string","enum":["NON_COMPLIANT","PARTIALLY_COMPLIANT","COMPLIANT"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","owner_id","status","created_at","updated_at"]}},"required":["obligation"]}`)
AddPeopleToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":"string","description":"Contract end date","format":"date-time"},"contract_start_date":{"type":"string","description":"Contract start date","format":"date-time"},"full_name":{"type":"string","description":"Full name"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"type":"string","description":"Position"},"primary_email_address":{"type":"string","format":"string"}},"required":["organization_id","full_name","primary_email_address","kind"]}`)
AddPeopleToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"people":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"description":"Contract end date","format":"date-time"},"contract_start_date":{"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"description":"Position"},"primary_email_address":{"type":"string","format":"string"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","primary_email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["people"]}`)
AddRiskToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"category":{"type":"string","description":"Risk category"},"description":{"type":"string","description":"Risk description"},"inherent_impact":{"type":"integer","description":"Inherent impact"},"inherent_likelihood":{"type":"integer","description":"Inherent likelihood"},"name":{"type":"string","description":"Risk name"},"note":{"type":"string","description":"Risk note"},"organization_id":{"type":"string","format":"string"},"owner_id":{"type":"string","format":"string"},"residual_impact":{"type":"integer","description":"Residual impact"},"residual_likelihood":{"type":"integer","description":"Residual likelihood"},"treatment":{"type":"string","enum":["MITIGATED","ACCEPTED","AVOIDED","TRANSFERRED"]}},"required":["organization_id","name","category","treatment","inherent_likelihood","inherent_impact"]}`)
AddRiskToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"risk":{"type":"object","properties":{"category":{"type":"string","description":"Risk category"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"description":{"description":"Risk description"},"id":{"type":"string","format":"string"},"inherent_impact":{"type":"integer","description":"Inherent impact"},"inherent_likelihood":{"type":"integer","description":"Inherent likelihood"},"inherent_risk_score":{"type":"integer","description":"Inherent risk score"},"name":{"type":"string","description":"Risk name"},"note":{"type":"string","description":"Risk note"},"organization_id":{"type":"string","format":"string"},"owner_id":{"anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No owner"}]},"residual_impact":{"type":"integer","description":"Residual impact"},"residual_likelihood":{"type":"integer","description":"Residual likelihood"},"residual_risk_score":{"type":"integer","description":"Residual risk score"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"treatment":{"type":"string","enum":["MITIGATED","ACCEPTED","AVOIDED","TRANSFERRED"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","name","category","treatment","inherent_likelihood","inherent_impact","inherent_risk_score","residual_likelihood","residual_impact","residual_risk_score","note","created_at","updated_at"]}},"required":["risk"]}`)
AddTaskToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"assigned_to_id":{"description":"Assigned to person ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"Not assigned"}]},"deadline":{"type":"string","description":"Deadline","format":"date-time"},"description":{"type":"string","description":"Task description"},"measure_id":{"description":"Measure ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No measure"}]},"name":{"type":"string","description":"Task name"},"organization_id":{"type":"string","format":"string"},"time_estimate":{"type":"string","description":"A duration"}},"required":["organization_id","name"]}`)
@@ -77,8 +75,8 @@ var (
GetNonconformityToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"nonconformity":{"type":"object","properties":{"audit_id":{"description":"Audit ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No audit"}]},"corrective_action":{"description":"Corrective action"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"date_identified":{"description":"Date identified","format":"date-time"},"description":{"description":"Description"},"due_date":{"description":"Due date","format":"date-time"},"effectiveness_check":{"description":"Effectiveness check"},"id":{"type":"string","format":"string"},"organization_id":{"type":"string","format":"string"},"owner_id":{"type":"string","format":"string"},"reference_id":{"type":"string","description":"Reference ID"},"root_cause":{"type":"string","description":"Root cause"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"status":{"type":"string","enum":["OPEN","IN_PROGRESS","CLOSED"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","reference_id","root_cause","owner_id","status","created_at","updated_at"]}},"required":["nonconformity"]}`)
GetObligationToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`)
GetObligationToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"obligation":{"type":"object","properties":{"actions_to_be_implemented":{"description":"Actions to be implemented"},"area":{"description":"Area"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"due_date":{"description":"Due date","format":"date-time"},"id":{"type":"string","format":"string"},"last_review_date":{"description":"Last review date","format":"date-time"},"organization_id":{"type":"string","format":"string"},"owner_id":{"type":"string","format":"string"},"regulator":{"description":"Regulator"},"requirement":{"description":"Requirement"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"source":{"description":"Source"},"source_id":{"description":"Source ID"},"status":{"type":"string","enum":["NON_COMPLIANT","PARTIALLY_COMPLIANT","COMPLIANT"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","owner_id","status","created_at","updated_at"]}},"required":["obligation"]}`)
GetPeopleToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`)
GetPeopleToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"people":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"description":"Contract end date","format":"date-time"},"contract_start_date":{"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"description":"Position"},"primary_email_address":{"type":"string","format":"string"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","primary_email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["people"]}`)
GetProfileToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`)
GetProfileToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"profile":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"description":"Contract end date","format":"date-time"},"contract_start_date":{"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["profile"]}`)
GetRiskToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`)
GetRiskToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"risk":{"type":"object","properties":{"category":{"type":"string","description":"Risk category"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"description":{"description":"Risk description"},"id":{"type":"string","format":"string"},"inherent_impact":{"type":"integer","description":"Inherent impact"},"inherent_likelihood":{"type":"integer","description":"Inherent likelihood"},"inherent_risk_score":{"type":"integer","description":"Inherent risk score"},"name":{"type":"string","description":"Risk name"},"note":{"type":"string","description":"Risk note"},"organization_id":{"type":"string","format":"string"},"owner_id":{"anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No owner"}]},"residual_impact":{"type":"integer","description":"Residual impact"},"residual_likelihood":{"type":"integer","description":"Residual likelihood"},"residual_risk_score":{"type":"integer","description":"Residual risk score"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"treatment":{"type":"string","enum":["MITIGATED","ACCEPTED","AVOIDED","TRANSFERRED"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","name","category","treatment","inherent_likelihood","inherent_impact","inherent_risk_score","residual_likelihood","residual_impact","residual_risk_score","note","created_at","updated_at"]}},"required":["risk"]}`)
GetSnapshotToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`)
@@ -119,8 +117,8 @@ var (
ListObligationsToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"next_cursor":{"type":"string","format":"string"},"obligations":{"type":"array","items":{"type":"object","properties":{"actions_to_be_implemented":{"description":"Actions to be implemented"},"area":{"description":"Area"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"due_date":{"description":"Due date","format":"date-time"},"id":{"type":"string","format":"string"},"last_review_date":{"description":"Last review date","format":"date-time"},"organization_id":{"type":"string","format":"string"},"owner_id":{"type":"string","format":"string"},"regulator":{"description":"Regulator"},"requirement":{"description":"Requirement"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"source":{"description":"Source"},"source_id":{"description":"Source ID"},"status":{"type":"string","enum":["NON_COMPLIANT","PARTIALLY_COMPLIANT","COMPLIANT"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","owner_id","status","created_at","updated_at"]}}},"required":["obligations"]}`)
ListOrganizationsToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"organization_id":{"type":"string","format":"string"}}}`)
ListOrganizationsToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"organizations":{"type":"array","items":{"type":"object","properties":{"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"description":{"description":"Organization description"},"id":{"type":"string","format":"string"},"name":{"type":"string","description":"Organization name"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","name","description","created_at","updated_at"]}}}}`)
ListPeopleToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"filter":{"type":"object","properties":{"exclude_contract_ended":{"type":"boolean","description":"Exclude people with ended contracts"}}},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT","FULL_NAME","KIND"]}},"required":["field","direction"]},"organization_id":{"type":"string","format":"string"},"size":{"type":"integer","description":"Page size"}},"required":["organization_id"]}`)
ListPeopleToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"next_cursor":{"type":"string","format":"string"},"people":{"type":"array","items":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"description":"Contract end date","format":"date-time"},"contract_start_date":{"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"description":"Position"},"primary_email_address":{"type":"string","format":"string"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","primary_email_address","additional_email_addresses","kind","created_at","updated_at"]}}},"required":["people"]}`)
ListProfilesToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"filter":{"type":"object","properties":{"exclude_contract_ended":{"type":"boolean","description":"Exclude profiles with ended contracts"}}},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT","FULL_NAME","KIND"]}},"required":["field","direction"]},"organization_id":{"type":"string","format":"string"},"size":{"type":"integer","description":"Page size"}},"required":["organization_id"]}`)
ListProfilesToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"next_cursor":{"type":"string","format":"string"},"profiles":{"type":"array","items":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"description":"Contract end date","format":"date-time"},"contract_start_date":{"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}}},"required":["profiles"]}`)
ListRisksToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"filter":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"snapshot_id":{"type":"string","format":"string"}}},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT","UPDATED_AT","NAME","CATEGORY","TREATMENT","INHERENT_RISK_SCORE","RESIDUAL_RISK_SCORE","OWNER_FULL_NAME"]}},"required":["field","direction"]},"organization_id":{"type":"string","format":"string"},"size":{"type":"integer","description":"Page size"}},"required":["organization_id"]}`)
ListRisksToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"next_cursor":{"type":"string","format":"string"},"risks":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string","description":"Risk category"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"description":{"description":"Risk description"},"id":{"type":"string","format":"string"},"inherent_impact":{"type":"integer","description":"Inherent impact"},"inherent_likelihood":{"type":"integer","description":"Inherent likelihood"},"inherent_risk_score":{"type":"integer","description":"Inherent risk score"},"name":{"type":"string","description":"Risk name"},"note":{"type":"string","description":"Risk note"},"organization_id":{"type":"string","format":"string"},"owner_id":{"anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No owner"}]},"residual_impact":{"type":"integer","description":"Residual impact"},"residual_likelihood":{"type":"integer","description":"Residual likelihood"},"residual_risk_score":{"type":"integer","description":"Residual risk score"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"treatment":{"type":"string","enum":["MITIGATED","ACCEPTED","AVOIDED","TRANSFERRED"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","name","category","treatment","inherent_likelihood","inherent_impact","inherent_risk_score","residual_likelihood","residual_impact","residual_risk_score","note","created_at","updated_at"]}}},"required":["risks"]}`)
ListSnapshotsToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT","NAME","TYPE"]}},"required":["field","direction"]},"organization_id":{"type":"string","format":"string"},"size":{"type":"integer","description":"Page size"}},"required":["organization_id"]}`)
@@ -167,8 +165,8 @@ var (
UpdateNonconformityToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"nonconformity":{"type":"object","properties":{"audit_id":{"description":"Audit ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No audit"}]},"corrective_action":{"description":"Corrective action"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"date_identified":{"description":"Date identified","format":"date-time"},"description":{"description":"Description"},"due_date":{"description":"Due date","format":"date-time"},"effectiveness_check":{"description":"Effectiveness check"},"id":{"type":"string","format":"string"},"organization_id":{"type":"string","format":"string"},"owner_id":{"type":"string","format":"string"},"reference_id":{"type":"string","description":"Reference ID"},"root_cause":{"type":"string","description":"Root cause"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"status":{"type":"string","enum":["OPEN","IN_PROGRESS","CLOSED"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","reference_id","root_cause","owner_id","status","created_at","updated_at"]}},"required":["nonconformity"]}`)
UpdateObligationToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"actions_to_be_implemented":{"description":"Actions to be implemented"},"area":{"description":"Area"},"due_date":{"description":"Due date","format":"date-time"},"id":{"type":"string","format":"string"},"last_review_date":{"description":"Last review date","format":"date-time"},"owner_id":{"description":"Owner ID","anyOf":[{"type":"string","format":"string"},{"type":"null"}]},"regulator":{"description":"Regulator"},"requirement":{"description":"Requirement"},"source":{"description":"Source"},"status":{"description":"Status","anyOf":[{"type":"string","enum":["NON_COMPLIANT","PARTIALLY_COMPLIANT","COMPLIANT"]},{"type":"null","description":"No status"}]},"type":{"description":"Type","anyOf":[{"type":"string","enum":["LEGAL","CONTRACTUAL"]},{"type":"null","description":"No type"}]}},"required":["id"]}`)
UpdateObligationToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"obligation":{"type":"object","properties":{"actions_to_be_implemented":{"description":"Actions to be implemented"},"area":{"description":"Area"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"due_date":{"description":"Due date","format":"date-time"},"id":{"type":"string","format":"string"},"last_review_date":{"description":"Last review date","format":"date-time"},"organization_id":{"type":"string","format":"string"},"owner_id":{"type":"string","format":"string"},"regulator":{"description":"Regulator"},"requirement":{"description":"Requirement"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"source":{"description":"Source"},"source_id":{"description":"Source ID"},"status":{"type":"string","enum":["NON_COMPLIANT","PARTIALLY_COMPLIANT","COMPLIANT"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","owner_id","status","created_at","updated_at"]}},"required":["obligation"]}`)
UpdatePeopleToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"additional_email_addresses":{"description":"Additional email addresses","anyOf":[{"type":"array","items":{"type":"string","format":"string"}},{"type":"null","description":"No additional email addresses"}]},"contract_end_date":{"description":"Contract end date","format":"date-time"},"contract_start_date":{"description":"Contract start date","format":"date-time"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"position":{"description":"Position"},"primary_email_address":{"type":"string","format":"string"}},"required":["id"]}`)
UpdatePeopleToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"people":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"description":"Contract end date","format":"date-time"},"contract_start_date":{"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"description":"Position"},"primary_email_address":{"type":"string","format":"string"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","primary_email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["people"]}`)
UpdateProfileToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"additional_email_addresses":{"description":"Additional email addresses","anyOf":[{"type":"array","items":{"type":"string","format":"string"}},{"type":"null","description":"No additional email addresses"}]},"contract_end_date":{"description":"Contract end date","format":"date-time"},"contract_start_date":{"description":"Contract start date","format":"date-time"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"position":{"description":"Position"}},"required":["id"]}`)
UpdateProfileToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"profile":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"description":"Contract end date","format":"date-time"},"contract_start_date":{"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["profile"]}`)
UpdateRiskToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"category":{"type":"string","description":"Risk category"},"description":{"description":"Risk description"},"id":{"type":"string","format":"string"},"inherent_impact":{"type":"integer","description":"Inherent impact"},"inherent_likelihood":{"type":"integer","description":"Inherent likelihood"},"name":{"type":"string","description":"Risk name"},"note":{"type":"string","description":"Risk note"},"owner_id":{"description":"Owner ID","anyOf":[{"type":"string","format":"string"},{"type":"null"}]},"residual_impact":{"type":"integer","description":"Residual impact"},"residual_likelihood":{"type":"integer","description":"Residual likelihood"},"treatment":{"type":"string","enum":["MITIGATED","ACCEPTED","AVOIDED","TRANSFERRED"]}},"required":["id"]}`)
UpdateRiskToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"risk":{"type":"object","properties":{"category":{"type":"string","description":"Risk category"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"description":{"description":"Risk description"},"id":{"type":"string","format":"string"},"inherent_impact":{"type":"integer","description":"Inherent impact"},"inherent_likelihood":{"type":"integer","description":"Inherent likelihood"},"inherent_risk_score":{"type":"integer","description":"Inherent risk score"},"name":{"type":"string","description":"Risk name"},"note":{"type":"string","description":"Risk note"},"organization_id":{"type":"string","format":"string"},"owner_id":{"anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No owner"}]},"residual_impact":{"type":"integer","description":"Residual impact"},"residual_likelihood":{"type":"integer","description":"Residual likelihood"},"residual_risk_score":{"type":"integer","description":"Residual risk score"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No snapshot"}]},"treatment":{"type":"string","enum":["MITIGATED","ACCEPTED","AVOIDED","TRANSFERRED"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","name","category","treatment","inherent_likelihood","inherent_impact","inherent_risk_score","residual_likelihood","residual_impact","residual_risk_score","note","created_at","updated_at"]}},"required":["risk"]}`)
UpdateTaskToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"assigned_to_id":{"description":"Assigned to person ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"Not assigned"}]},"deadline":{"description":"Deadline","anyOf":[{"type":"string","description":"Deadline","format":"date-time"},{"type":"null","description":"No deadline"}]},"description":{"description":"Task description"},"id":{"type":"string","format":"string"},"measure_id":{"description":"Measure ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No measure"}]},"name":{"type":"string","description":"Task name"},"state":{"description":"Task state","anyOf":[{"type":"string","enum":["TODO","DONE"]},{"type":"null","description":"No state"}]},"time_estimate":{"description":"Time estimate","anyOf":[{"type":"string","description":"A duration"},{"type":"null","description":"No time estimate"}]}},"required":["id"]}`)
@@ -706,31 +704,6 @@ type AddObligationOutput struct {
Obligation *Obligation `json:"obligation"`
}
// AddPeopleInput represents the schema
type AddPeopleInput struct {
// Additional email addresses
AdditionalEmailAddresses []mail.Addr `json:"additional_email_addresses,omitempty"`
// Contract end date
ContractEndDate *time.Time `json:"contract_end_date,omitempty"`
// Contract start date
ContractStartDate *time.Time `json:"contract_start_date,omitempty"`
// Full name
FullName string `json:"full_name"`
// People kind
Kind coredata.PeopleKind `json:"kind"`
// Organization ID
OrganizationID gid.GID `json:"organization_id"`
// Position
Position *string `json:"position,omitempty"`
// Primary email address
PrimaryEmailAddress mail.Addr `json:"primary_email_address"`
}
// AddPeopleOutput represents the schema
type AddPeopleOutput struct {
People *People `json:"people"`
}
// AddRiskInput represents the schema
type AddRiskInput struct {
// Risk category
@@ -1312,15 +1285,15 @@ type GetObligationOutput struct {
Obligation *Obligation `json:"obligation"`
}
// GetPeopleInput represents the schema
type GetPeopleInput struct {
// People ID
// GetProfileInput represents the schema
type GetProfileInput struct {
// Profile ID
ID gid.GID `json:"id"`
}
// GetPeopleOutput represents the schema
type GetPeopleOutput struct {
People *People `json:"people"`
// GetProfileOutput represents the schema
type GetProfileOutput struct {
Profile *Profile `json:"profile"`
}
// GetRiskInput represents the schema
@@ -1654,24 +1627,24 @@ type ListOrganizationsOutput struct {
Organizations []*Organization `json:"organizations,omitempty"`
}
// ListPeopleInput represents the schema
type ListPeopleInput struct {
// ListProfilesInput represents the schema
type ListProfilesInput struct {
// Page cursor
Cursor *page.CursorKey `json:"cursor,omitempty"`
Filter *ListPeopleInputFilter `json:"filter,omitempty"`
// People order by
OrderBy *PeopleOrderBy `json:"order_by,omitempty"`
Cursor *page.CursorKey `json:"cursor,omitempty"`
Filter *ListProfilesInputFilter `json:"filter,omitempty"`
// Profile order by
OrderBy *ProfileOrderBy `json:"order_by,omitempty"`
// Organization ID
OrganizationID gid.GID `json:"organization_id"`
// Page size
Size *int `json:"size,omitempty"`
}
// ListPeopleOutput represents the schema
type ListPeopleOutput struct {
// ListProfilesOutput represents the schema
type ListProfilesOutput struct {
// Next cursor
NextCursor *page.CursorKey `json:"next_cursor,omitempty"`
People []*People `json:"people"`
Profiles []*Profile `json:"profiles"`
}
// ListRisksInput represents the schema
@@ -1880,8 +1853,8 @@ type Organization struct {
UpdatedAt time.Time `json:"updated_at"`
}
// People represents the schema
type People struct {
// Profile represents the schema
type Profile struct {
// Additional email addresses
AdditionalEmailAddresses []mail.Addr `json:"additional_email_addresses"`
// Contract end date
@@ -1890,28 +1863,28 @@ type People struct {
ContractStartDate *time.Time `json:"contract_start_date,omitempty"`
// Creation timestamp
CreatedAt time.Time `json:"created_at"`
// Primary email address
EmailAddress mail.Addr `json:"email_address"`
// Full name
FullName string `json:"full_name"`
// People ID
// Profile ID
ID gid.GID `json:"id"`
// People kind
Kind coredata.PeopleKind `json:"kind"`
// Profile kind
Kind coredata.MembershipProfileKind `json:"kind"`
// Organization ID
OrganizationID gid.GID `json:"organization_id"`
// Position
Position *string `json:"position,omitempty"`
// Primary email address
PrimaryEmailAddress mail.Addr `json:"primary_email_address"`
// Update timestamp
UpdatedAt time.Time `json:"updated_at"`
}
// PeopleOrderBy represents the schema
type PeopleOrderBy struct {
// People order direction
// ProfileOrderBy represents the schema
type ProfileOrderBy struct {
// Profile order direction
Direction page.OrderDirection `json:"direction"`
// People order field
Field coredata.PeopleOrderField `json:"field"`
// Profile order field
Field coredata.MembershipProfileOrderField `json:"field"`
}
// PublishDocumentVersionInput represents the schema
@@ -1932,7 +1905,7 @@ type PublishDocumentVersionOutput struct {
type RequestDocumentVersionSignatureInput struct {
// Document version ID
DocumentVersionID gid.GID `json:"document_version_id"`
// Signatory ID (People ID)
// Signatory ID (Profile ID)
SignatoryID gid.GID `json:"signatory_id"`
}
@@ -2359,8 +2332,8 @@ type UpdateObligationOutput struct {
Obligation *Obligation `json:"obligation"`
}
// UpdatePeopleInput represents the schema
type UpdatePeopleInput struct {
// UpdateProfileInput represents the schema
type UpdateProfileInput struct {
// Additional email addresses
AdditionalEmailAddresses *[]mail.Addr `json:"additional_email_addresses,omitempty"`
// Contract end date
@@ -2369,19 +2342,17 @@ type UpdatePeopleInput struct {
ContractStartDate mcp.Omittable[*time.Time] `json:"contract_start_date,omitempty"`
// Full name
FullName *string `json:"full_name,omitempty"`
// People ID
// Profile ID
ID gid.GID `json:"id"`
// People kind
Kind *coredata.PeopleKind `json:"kind,omitempty"`
// Profile kind
Kind *coredata.MembershipProfileKind `json:"kind,omitempty"`
// Position
Position mcp.Omittable[*string] `json:"position,omitempty"`
// Primary email address
PrimaryEmailAddress *mail.Addr `json:"primary_email_address,omitempty"`
}
// UpdatePeopleOutput represents the schema
type UpdatePeopleOutput struct {
People *People `json:"people"`
// UpdateProfileOutput represents the schema
type UpdateProfileOutput struct {
Profile *Profile `json:"profile"`
}
// UpdateRiskInput represents the schema
@@ -2607,9 +2578,9 @@ type ListObligationsInputFilter struct {
SnapshotID *gid.GID `json:"snapshot_id,omitempty"`
}
// ListPeopleInputFilter represents the schema
type ListPeopleInputFilter struct {
// Exclude people with ended contracts
// ListProfilesInputFilter represents the schema
type ListProfilesInputFilter struct {
// Exclude profiles with ended contracts
ExcludeContractEnded *bool `json:"exclude_contract_ended,omitempty"`
}