diff --git a/context_providers/confluence_context_provider.py b/context_providers/confluence_context_provider.py
index 8c9d8304c72629b0bc5d29724b26e1115412f250..181ced00fc00a75a1dcce84623a895625f627eaa 100644
--- a/context_providers/confluence_context_provider.py
+++ b/context_providers/confluence_context_provider.py
@@ -13,6 +13,10 @@ from markdownify import markdownify as md
 
 class ConfluenceContextProvider(ContextProvider):
     title = "confluence"
+    display_title = "Confluence Pages"
+    description = "Reference Confluence pages"
+    dynamic = True
+    requires_query = True
 
     server: str
     username: str
@@ -37,13 +41,16 @@ class ConfluenceContextProvider(ContextProvider):
         return [self.BASE_CONTEXT_ITEM]
 
     async def get_item(self, id: ContextItemId, query: str) -> ContextItem:
-        if id.item_id != self.CONFLUENCE_CONTEXT_ITEM_ID:
-            raise Exception("Invalid item id")
+        if not id.provider_title == self.title:
+            raise Exception("Invalid provider title for item")
+        page_id = query.lstrip(self.title + " ").strip()
+        if page_id is None or page_id == "":
+            return None
         confluence = Confluence(
             url=self.server, username=self.username, password=self.token, cloud=True
         )
         page = confluence.get_page_by_id(
-            query.lstrip(self.title + " "),
+            page_id,
             expand="space,body.view",
             status=None,
             version=None,
diff --git a/context_providers/gitlab_context_provider.py b/context_providers/gitlab_context_provider.py
index a17e5a0556b949280f8aee2b3a0b85812fb8de71..a2c4d7538e46dc490ea0c4080eba82fbe4b655bf 100644
--- a/context_providers/gitlab_context_provider.py
+++ b/context_providers/gitlab_context_provider.py
@@ -12,6 +12,9 @@ from gitlab import Gitlab
 
 class GitLabContextProvider(ContextProvider):
     title = "gitlab"
+    display_title = "GitLab Issues"
+    description = "Reference GitLab issues"
+    dynamic = False
 
     server: str
     token: str
diff --git a/context_providers/jira_context_provider.py b/context_providers/jira_context_provider.py
index ca8e38cd5bb81a00396f7ffdd379f3a1bbd5c439..84aa6a0534a40971d147145a4ca562690188ec6e 100644
--- a/context_providers/jira_context_provider.py
+++ b/context_providers/jira_context_provider.py
@@ -12,6 +12,10 @@ from atlassian import Jira
 
 class JIRAContextProvider(ContextProvider):
     title = "jira"
+    display_title = "Jira Issues"
+    description = "Reference Jira issues"
+    dynamic = True
+    requires_query = True
 
     server: str
     username: str
@@ -36,12 +40,15 @@ class JIRAContextProvider(ContextProvider):
         return [self.BASE_CONTEXT_ITEM]
 
     async def get_item(self, id: ContextItemId, query: str) -> ContextItem:
-        if id.item_id != self.JIRA_CONTEXT_ITEM_ID:
-            raise Exception("Invalid item id")
+        if not id.provider_title == self.title:
+            raise Exception("Invalid provider title for item")
+        issue_key = query.lstrip(self.title + " ").strip()
+        if issue_key is None or issue_key == "":
+            return None
         jira = Jira(
             url=self.server, username=self.username, password=self.token, cloud=True
         )
-        issue = jira.issue(query.lstrip(self.title + " "))
+        issue = jira.issue(issue_key)
         ctx_item = self.BASE_CONTEXT_ITEM.copy()
         ctx_item.description.name = issue["key"]
         ctx_item.description.description = issue["fields"]["summary"]