diff --git a/pkg/hashicorp/tfregistry/handlers.go b/pkg/hashicorp/tfregistry/handlers.go index 72a8aa1..78ddc64 100644 --- a/pkg/hashicorp/tfregistry/handlers.go +++ b/pkg/hashicorp/tfregistry/handlers.go @@ -94,7 +94,11 @@ func ResolveProviderDocID(registryClient *http.Client, logger *log.Logger) (tool cs_pn, err_pn := containsSlug(fmt.Sprintf("%s_%s", providerDetail.ProviderName, doc.Slug), serviceSlug) if (cs || cs_pn) && err == nil && err_pn == nil { contentAvailable = true - builder.WriteString(fmt.Sprintf("- providerDocID: %s\n- Title: %s\n- Category: %s\n---\n", doc.ID, doc.Title, doc.Category)) + contentSnippet, err := getContentSnippet(registryClient, doc.ID, logger) + if err != nil { + return nil, logAndReturnError(logger, fmt.Sprintf("error fetching provider-docs/%s within ResolveProviderDocID", doc.ID), err) + } + builder.WriteString(fmt.Sprintf("- providerDocID: %s\n- Content: %s\n---\n", doc.ID, contentSnippet)) } } } @@ -108,6 +112,20 @@ func ResolveProviderDocID(registryClient *http.Client, logger *log.Logger) (tool } } +func getContentSnippet(registryClient *http.Client, docID string, logger *log.Logger) (string, error) { + + docContent, err := sendRegistryCall(registryClient, "GET", fmt.Sprintf("provider-docs/%s", docID), logger, "v2") + if err != nil { + return "", logAndReturnError(logger, fmt.Sprintf("error fetching provider-docs/%s within getContentSnippet", docID), err) + } + var docDescription ProviderResourceDetails + if err := json.Unmarshal(docContent, &docDescription); err != nil { + return "", logAndReturnError(logger, fmt.Sprintf("error unmarshalling provider-docs/%s within getContentSnippet", docID), err) + } + contentSnippet := strings.SplitN(docDescription.Data.Attributes.Content, "\n", 10) + return strings.Join(contentSnippet[:9], "\n"), nil +} + // GetProviderDocs creates a tool to get provider docs for a specific service from registry. func GetProviderDocs(registryClient *http.Client, logger *log.Logger) (tool mcp.Tool, handler server.ToolHandlerFunc) { return mcp.NewTool("getProviderDocs", diff --git a/pkg/hashicorp/tfregistry/utils.go b/pkg/hashicorp/tfregistry/utils.go index 37af8fa..9cadfa2 100644 --- a/pkg/hashicorp/tfregistry/utils.go +++ b/pkg/hashicorp/tfregistry/utils.go @@ -512,7 +512,11 @@ func GetProviderDocsV2(client *http.Client, providerDetail ProviderDetail, logge builder.WriteString("Each result includes:\n- providerDocID: tfprovider-compatible identifier\n- Title: Service or resource name\n- Category: Type of document\n") builder.WriteString("For best results, select libraries based on the serviceSlug match and category of information requested.\n\n---\n\n") for _, doc := range docs { - builder.WriteString(fmt.Sprintf("- providerDocID: %s\n- Title: %s\n- Category: %s\n---\n", doc.ID, doc.Attributes.Title, doc.Attributes.Category)) + contentSnippet, err := getContentSnippet(client, doc.ID, logger) + if err != nil { + return "", logAndReturnError(logger, fmt.Sprintf("error fetching provider-docs/%s within GetProviderDocsV2", doc.ID), err) + } + builder.WriteString(fmt.Sprintf("- providerDocID: %s\n- Content: %s\n---\n", doc.ID, contentSnippet)) } return builder.String(), nil