diff --git a/pkg/server/api/mcp/v1/schema.resolvers.go b/pkg/server/api/mcp/v1/schema.resolvers.go index 8eca8b35f..76bda1c62 100644 --- a/pkg/server/api/mcp/v1/schema.resolvers.go +++ b/pkg/server/api/mcp/v1/schema.resolvers.go @@ -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") +} diff --git a/pkg/server/api/mcp/v1/server/server.go b/pkg/server/api/mcp/v1/server/server.go index d6fde4eec..fcc6ea3cc 100644 --- a/pkg/server/api/mcp/v1/server/server.go +++ b/pkg/server/api/mcp/v1/server/server.go @@ -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, diff --git a/pkg/server/api/mcp/v1/specification.yaml b/pkg/server/api/mcp/v1/specification.yaml index 6e76b1361..5433095f9 100644 --- a/pkg/server/api/mcp/v1/specification.yaml +++ b/pkg/server/api/mcp/v1/specification.yaml @@ -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: diff --git a/pkg/server/api/mcp/v1/types/people.go b/pkg/server/api/mcp/v1/types/people.go deleted file mode 100644 index d5338840f..000000000 --- a/pkg/server/api/mcp/v1/types/people.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2025 Probo Inc . -// -// 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, - } -} diff --git a/pkg/server/api/mcp/v1/types/types.go b/pkg/server/api/mcp/v1/types/types.go index c2926693f..0e90042f9 100644 --- a/pkg/server/api/mcp/v1/types/types.go +++ b/pkg/server/api/mcp/v1/types/types.go @@ -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"` }